Oracle过程中执行动态SQL或DDL语句

Oracle过程中执行动态SQL或DDL语句

ID:37855587

大小:35.00 KB

页数:4页

时间:2019-06-01

Oracle过程中执行动态SQL或DDL语句_第1页
Oracle过程中执行动态SQL或DDL语句_第2页
Oracle过程中执行动态SQL或DDL语句_第3页
Oracle过程中执行动态SQL或DDL语句_第4页
资源描述:

《Oracle过程中执行动态SQL或DDL语句》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、·如果你用的是Oracle8i及以上的版本,那简单,在过程中用executeimmediatesql_str就行,sql_str是一个拼凑的SQL语句,但这个动态语句中带参数,或Select的结果要into到变量中时就要稍加留心一下了。而在8i以前的版本(谁还用这么古老的玩艺,总有些不得已的地方,老系统考虑升级成本遗留下来的,应用软件所伴随着的等),都没法用executeimmediate,就得使用DBMS_SQL包来实现了   何谓动态SQL和DDL语句呢?通常在过程中要操作的表名、字段名都必须是明确的,否则编译过程时就要

2、报错,但如果这两者也用变量名来表示就是动态的。DDL就是数据库对象定义的操作,如CREATETABLE/VIEW/INDEX/SYN/CLUSTER……,及这些对象的删除、修改操作等等。   比如在Oracle中有执行下面过程块的意图时,就要使用到executeimmediate或是DBMS_SQL包了。当然下面的语句块是通不过的。declare   col_namevarchar2(30):='name';--假定表user存在name字段   col_val varchar2(30);begin   selectcol_

3、nameintocol_val--按照惯常思维,可能就会这么写       fromuserwhereagebetween18and25;  --编译时会提示列名不存在的   droptablet2; --不能直接执行DDL语句,后面查询t2编译器就无能为力了end;   现在我们提出对上面问题的解,针对第一个Select语句来说明,并假设查询中还带有参数。块中的DDL也是类似的解法。例子因力图涵盖更多内容,所以稍显复杂,如果不需要into(如update/delete语句),或者不带参数,会简单多了,应不难简化。有两种处理

4、方法,以8i 为分水岭。   1.Oracle8i及以上版本的过程中处理动态SQL语句的办法declare   v_col_namevarchar2(30):='name';--字段名name用变量来表示   v_user_name varchar2(30);--用户名称   v_user_age integer;      --用户年龄   v_sql_str varchar2(500); --动态SQL语句begin   v_sql_str:='select'

5、

6、v_col_name

7、

8、',agefromusers--字

9、段名后面不能紧随into到变量了                  whereagebetween:start_ageand:end_ageandrownum=1';--两个命名参数   --用executeimmediate动态执行SQL语句   --注意其后的into字段值到变量的写法,还有using来代入参数   executeimmediatev_sql_strintov_user_name,v_user_ageusing18,25;   dbms_output.put_line('第一个符合条件的用户:'

10、

11、v_u

12、ser_name

13、

14、',年龄:'

15、

16、v_user_age);end;   除此之外,在Oracle8i及以上版本中,还能用DBMS_UTILITY.EXEC_DDL_STATEMENT(ddl_sql_str)执行DDL语句。   2.Oracle8i以下版本相应解决之道,用DBMS_SQL包,如Oracle8.0.5中   如果也用executeimmediate的话编译过程时就会报如下错误:   Error:PLS-00103:出现符号"IMMEDIATE"在需要下列之一时:   :=.(@%;   符号":=在"IMM

17、EDIATE"继续之前已插入。   Line:3declare   v_col_namevarchar2(30):='name';--字段名name用变量来表示   v_user_name varchar2(30);--用户名称   v_user_age integer;      --用户年龄   v_sql_str varchar2(500); --动态SQL语句   v_cursorid  integer;--游标ID   v_dummy  integer;--定义一个哑元变量begin   v_sql_str:='s

18、elect'

19、

20、v_col_name

21、

22、',agefromusers--字段名后面不能紧随into到变量了                  whereagebetween:start_ageand:end_age';--两个命名参数   v_cursorid:=dbms_sql.open

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。