前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >【DB笔试面试464】动态SQL是什么?

【DB笔试面试464】动态SQL是什么?

作者头像
小麦苗DBA宝典
发布2019-09-30 17:01:12
1.3K0
发布2019-09-30 17:01:12
举报

题目部分

动态SQL是什么?

答案部分

在PL/SQL开发过程中,使用SQL或PL/SQL可以实现大部分的需求,但是,在某些特殊的情况下,在PL/SQL中使用标准的SQL语句或DML语句不能实现自己的需求,例如需要动态建表或执行某个不确定的操作的时候,就需要动态执行,还有DDL语句及系统控制语句都不能在PL/SQL中直接使用,这就需要使用动态SQL来实现。因此,在Oracle数据库开发PL/SQL块中,可以把SQL分为静态SQL和动态SQL。所谓静态SQL指的是在PL/SQL块中使用的SQL语句在编译时是明确的,执行的是确定对象。动态SQL是指在PL/SQL块编译时SQL语句是不确定的,如根据用户输入的参数的不同而执行不同的操作。编译程序对动态语句部分不进行处理,只是在程序运行时动态地创建语句、对语句进行语法分析并执行该语句。动态SQL允许在SQL客户模块或嵌入式宿主程序的执行过程中执行动态生成的SQL语句,动态SQL语句在程序编译时尚未确定。其中,有些部分需要在程序的执行过程中临时生成的SQL语句,SQL标准引入动态SQL的原因是由于静态SQL不能提供足够的编程灵活性。

动态SQL是使用EXECUTE IMMEDIATE语句来实现的。下面给出一个使用动态SQL的例子。

需求:完成一个存储过程,根据用户输入的表名及字段名等参数动态创建表。

SQL> SELECT * FROM LHR_TB_0427; SELECT * FROM LHR_TB_0427 * ERROR at line 1: ORA-00942: table or view does not exist SQL> CREATE OR REPLACE PROCEDURE PROC_TEST(TABLE_NAME IN VARCHAR2, --表名 2 FIELD1 IN VARCHAR2, --字段名 3 DATATYPE1 IN VARCHAR2, --字段类型 4 FIELD2 IN VARCHAR2, --字段名 5 DATATYPE2 IN VARCHAR2 --字段类型 6 ) 7 AUTHID CURRENT_USER AS 8 STR_SQL VARCHAR2(500); 9 BEGIN 10 STR_SQL := 'CREATE TABLE ' || TABLE_NAME || '(' || FIELD1 || ' ' || 11 DATATYPE1 || ',' || FIELD2 || ' ' || DATATYPE2 || ')'; 12 EXECUTE IMMEDIATE STR_SQL; --动态执行DDL语句,注意这里的STR_SQL变量的最后不能有分号 13 END; 14 /

Procedure created.

SQL> EXEC PROC_TEST('LHR_TB_0427','ID','NUMBER(8) NOT NULL','NAME','VARCHAR2(100)');

PL/SQL procedure successfully completed.

SQL> SELECT * FROM LHR_TB_0427;

no rows selected

本文选自《Oracle程序员面试笔试宝典》,作者:李华荣。

About Me:小麦苗

● 本文作者:小麦苗,只专注于数据库的技术,更注重技术的运用

● 作者博客地址:http://blog.itpub.net/26736162/abstract/1/

● 本系列题目来源于作者的学习笔记,部分整理自网络,若有侵权或不当之处还请谅解

● 版权所有,欢迎分享本文,转载请保留出处

● 题目解答若有不当之处,还望各位朋友批评指正,共同进步

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2018-12-22,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 DB宝 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档