PLSQL中動態SQL文運用

2021-05-01 04:57:23 字數 1526 閱讀 6311

兩種情況:

一:簡單的動態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 ;

PL SQL 動態SQL 游標

1.使用動態sql可以在依賴物件不存在時建立子程式 2.動態sql主要利用execute immediate語句執行dml ddl dcl等語句操作 3.如果使用了繫結變數,則必須在execute immediate中使用using字句設定所需要的繫結變數 4.使用returning或return語...

PLSQL中執行本地動態SQL

在pl sql中只有dml sql可以直接執行,使用oracle內建的dbms sql包,可以執行動態sql語句 在執行時生成乙個sql的串,將該串提交給dbms包來執行 data manlpulation language dml 包括 select,insert,delete,set trans...

PL SQL執行動態SQL(二)

pl sql動態sql 依據 dbms sql包 這個包提供了一種使用動態sql來訪問資料庫的方法。示例 1.執行插入刪除等dml語句 declare v cursorid number v insertrecords varchar2 500 v numrows integer begin v c...