动态sql与绑定变量

动态sql与绑定变量

ID:14438225

大小:70.50 KB

页数:30页

时间:2018-07-28

动态sql与绑定变量_第1页
动态sql与绑定变量_第2页
动态sql与绑定变量_第3页
动态sql与绑定变量_第4页
动态sql与绑定变量_第5页
资源描述:

《动态sql与绑定变量》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

1、动态SQL与绑定变量动态SQL与绑定变量(初稿转载)http://space.itpub.net/12474069/viewspace-6211571什么是动态SQL(DynamicSQL)动态SQL使你在运行时,以字符串的形式构造SQL语句。这些语句包含在PL/SQL块中,并且常常包含占位符来使用绑定变量。这一点于静态SQL是不同的。静态SQL在编译时就固定了。由于在编译时SQL的全文还不确定,所以你可使用动态SQL构建灵活的,多用途的应用程序。可以在PL/SQL,Pro*C/C++,andJava这几种不同的开发环境中使用动态SQL。举一个使用动态

2、SQL的例子,比如在一个数据仓库的环境中,在运行时才知道表的名字。这些表是以年月来明明的,例如:inv_01_2003,inv_04_2003,inv_07_2003,inv_10_2003,inv_01_2004,等等。你可以在报表程序中运行时定义这些表的名字。 再举另外一个例子,你现在要运行一个复杂的查询,并且排序字段是要由用户来选择。为了不因为排序顺序的改变而编写更多的查询语句,你可以使用一个包含定义的排序子句的动态SQL.2为什么要使用动态SQL静态SQL和动态SQL都有各自的优缺点静态SQL的优点是:编译成功就表示访问的数据库对象有效并且有权

3、限来访问数据库的对象。静态SQL的性能一般要好于动态SQL尽管如此,静态SQL也有他的局限,而这些局限动态SQL却能克服。下面列举了这些局限 不知道PL/SQL中语句的全文。这些语句也许依赖于传入参数,或者需要程序进行处理而得到。 执行DDL语句或者其他静态SQL不支持的语句需要一个应对不同的数据定义,而不需要重新编译的程序。动态SQL比静态SQL更加灵活,因为它可以构造出面对不同环境都可重用的代码。作为一般的准则,你应该在静态SQL不能达到目标,或者使用静态SQL比较繁杂的时候使用动态SQL。下面列举出使用动态SQL的典型情况。在PL/SQL中运行D

4、atadefinitionlanguage(DDL)和Sessioncontrollanguage(SCL)运行动态查询参照在编译时不存在的对象为了更佳的性能3避免写动态SQL使用DECODE,CASE构造半动态SQL上图是淘宝网中手机选项。经常有这样的需求。如果输入手机型号那么就用手机型号筛选,如果没有输入那么就不用筛选了。常规解决办法动态SQL查询Adeclarec1SYS_REFCURSOR;i_phone_namevarchar2(20);i_phone_typevarchar2(20)

5、;i_phone_servicevarchar(20);v_sqlvarchar2(2000);rphone_info%rowtype;begini_phone_name:='''SYS''';v_sql:='select*fromphone_infowhere1=1';ifi_phone_nameisnotnullthenv_sql:=v_sql

6、

7、'andWNER='

8、

9、i_phone_name;endif;ifi_phone_typeisnotnullthenv_sql:=v_sql

10、

11、'andOBJECT_NAME='

12、

13、i_phone_typ

14、e;endif;ifi_phone_serviceisnotnullthenv_sql:=v_sql

15、

16、'andOBJECT_ID='

17、

18、i_phone_service;endif;v_sql:=v_sql

19、

20、'andrownum<20';dbms_output.put_line(v_sql);openc1forv_sql;fetchc1intor;while(c1%found)loopnull;dbms_output.put_line('OBJECT_NAME='

21、

22、r.OBJECT_NAME);fetchc1intor;endloop;closec

23、1;end;输出结果select*fromphone_infowhere1=1andrownum<20OBJECT_NAME=ICOL$OBJECT_NAME=I_USER1OBJECT_NAME=CON$OBJECT_NAME=UNDO$OBJECT_NAME=C_COBJ#OBJECT_NAME=I_OBJ#OBJECT_NAME=PROXY_ROLE_DATA$OBJECT_NAME=I_IND1OBJECT_NAME=I_CDEF2OBJECT_N

24、AME=I_PROXY_ROLE_DATA$_1OBJECT_NAME=FILE$OBJECT

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

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

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