PLSQL中使用动态SQL编程.docVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
PL/SQL中使用动态SQL编程? 在PL/SQL程序设计过程中,会遇到很多必须使用动态sql的地方,oracle系统所提供的DMBS_SQL包可以帮助你解决问题。 ? (一)介绍 ? DBMS_SQL系统包提供了很多函数及过程,现在简要阐述其中使用频率较高的几种: ? ? function?open_cursor:打开一个动态游标,并返回一个整型; ? ? procedure?close_cursor(c?in?out?integer);关闭一个动态游标,参数为open_cursor所打开的游标; ? ? procedure?parse(c?in?integer,?statement?in?varchar2,?language_flag?in?integer):对动态游标所提供的sql语句进行解析,参数C表示游标,statement为sql语句,language-flag为解析sql语句所用oracle版本,一般有V6,V7跟native(在不明白所连database版本时,使用native); ? ? procedure?define_column(c?in?integer,?position?in?integer,?column?any?datatype,?[column_size?in?integer]):定义动态游标所能得到的对应值,其中c为动态游标,positon为对应动态sql中的位置(从1开始),column为该值所对应的变量,可以为任何类型,column_size只有在column为定义长度的类型中使用如VARCHAR2,CHAR等(该过程有很多种情况,此处只对一般使用到的类型进行表述); ? ? function?execute(c?in?integer):执行游标,并返回处理一个整型,1表示成功,0表示失败,代表处理结果(对insert,delete,update才有意义,而对select语句而言可以忽略); ? ? function?fetch_rows(c?in?integer):对游标进行循环取数据,并返回一个整数,为0时表示已经取到游标末端; ? ? procedure?column_value(c?in?integer,?position?in?integer,?value):将所取得的游标数据赋值到相应的变量,c为游标,position为位置,value则为对应的变量; ? ? procedure?bind_variable(c?in?integer,?name?in?varchar2,?value):定义动态sql语句(DML)中所对应字段的值,c为游标,name为字段名称,value为字段的值; ? ? 以上是在程序中经常使用到的几个函数及过程,其他函数及过程请参照oracle所提供定义语句dbmssql.sql ? ? (二)一般过程 ? 对于一般的select操作,如果使用动态的sql语句则需要进行以下几个步骤: ? open?cursor---parse---define?column---excute---fetch?rows---close?cursor; ? 而对于dml操作(insert,update)则需要进行以下几个步骤: ? open?cursor---parse---bind?variable---execute---close?cursor; ? 对于delete操作只需要进行以下几个步骤: ? open?cursor---parse---execute---close?cursor; ? ? (三)实例应用 ? 1.?declare ? v_cid?integer; ? v_updatestr?varchar2(100); ? v_rowupdated?integer; ? begin ? v_cid:=dbms_sql.open_cursor; ? v_updatestr:=update?emp?set?comm=400?where?empno=7499; ? dbms_sql.parse(v_cid,v_updatestr,dbms_sql.native); ? v_rowupdated:=dbms_sql.execute(v_cid); ? dbms_sql.close_cursor(v_cid); ? exception ? when?others?then ? dbms_sql.close_cursor(v_cid); ? raise; ? end; ? 2.create?or?replace?function?updatecomm(p_comm?m%type,?p_empno?em

文档评论(0)

书房 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档