PLSQL中动态SQL文运用

 两种情况:

     一:简单的动态SQL文,其通过字符串拼起来的。 执行方式:EXECUTE IMMEDIATE vc_sql 后面也可以跟上INTO 将检索到的值保存到变量中去。

例子: vc_sql_sub_1  VARCHAR(1024)           := '';

       nm_datacount_sub    NUMBER              := 0;

       vc_sql_sub_1 :=' SELECT COUNT(KEIREN_NO)  FROM TW_HOKAN_KEISANMOTO '

       EXECUTE IMMEDIATE vc_sql_sub_1  INTO nm_datacount_sub;

 

补充: 项目的教训。

       在动态拼成的SQL,如果拼入的变量有特殊符号的时候 例如:,&时,不要将其直接拼到SQL文中而是作为引数。

      利用      EXECUTE IMMEDIATE    USING (变量值);进行传递。

 

上面只是个简单例子,通常SQL文需要根据PLSQL的参数来确定的。

 

      二:动态CURSOR。其的执行需要系统包【DBMS_SQL】的帮助。

      过程是:1,根据要求拼写相应的SQL文

                 2,利用 DBMS_SQL中OPEN_CURSOR的方法打开一个CURSOR。用法 DBMS_SQL.OPEN_CURSOR 放回值为一个INTEGER类型的整数。

                 3,然后用DBMS_SQL包中的PARSE方法,将上面两则联系起来。用法 DBMS_SQL.PARSE(2返回的整数,1的SQL文,DBMS_SQL.NATIVE),其中第三个参数是编译SQL文的编译器版本。一般就用 DBMS_SQL.NATIVE

                 4,接下来是定义列 DBMS_SQL.DEFINE_COLUMN(2返回的整数,顺序,列名,长度)如果列名类型是NUMBER的话就不需要制定长度。VARCHAR可定要制定。其他数据类型没试过。

                 5,执行2定义的CURSOR DBMS_SQL.EXECUTE(2返回的整数)。

                 6,就是循环去取CURSOR 中的数据。取数据的方法 DBMS_SQL.FETCH_ROWS(2返回的整数)。如果返回0 说明已经到头了,可以EXIT了。 取具体的值 DBMS_SQL.COLUMN_VALUE(2返回的整数, 顺序, 变量名); 

 

ps:操作2中返回的那个整数应该是(游标【CURSOR】的ID)

最后别忘了关闭游标【CURSOR】  DBMS_SQL.close_cursor(2返回的整数)

 

 

 

 

方法2: 1.定义一个系统CURSOR(SYS_REFCURSOR) 例如 1_refcur SYS_REFCURSOR;

           2.定义一个变量类型为SQL文执行后,取得数据record类型的变量 TYPE 1_rec IS RECORD

           3. OPEN 1_refcur  FOR vc_sql;

              LOOP

                      FETCH cr_hokan_keisanmoto_refcur INTO 1_rec ;

                      EXIT WHEN cr_hokan_keisanmoto_refcur%NOTFOUND;

              END LOOP;

              CLOSE 1_refcur ;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值