oracle 動態語句中的returning用法
一般情況下,在plsql語句中,對一個表做update的時候,我們可以直接透過returning子句來得到更新的資料的情況(包括更新的和未更新的),如:
DECLARE
type rec_return is record(ename varchar2(30), sal number(10,2));
TYPE tbl_return IS TABLE OF rec_return index by pls_integer;
v_ret tbl_return;
BEGIN
update scott.emp t
set t.sal = t.sal + 100
returning t.ename, t.sal bulk collect into v_ret;
END;
但是,如果是一個動態語句,我們如何實現類似returning bulk collect into這樣的功能呢?這個問題上次已經解決過一次,但是沒有記錄下來,很快就忘掉了,這次要用的時候就沒想起來。這次又翻了下文件,順便記錄下來:
DECLARE
TYPE tbl_ename IS TABLE OF varchar2(255) index by pls_integer;
type tbl_sal is table of number(10,2) index by pls_integer;
v_ret tbl_ename;
v_sal tbl_sal;
v_sqltext varchar2(2000) := '';
BEGIN
v_sqltext := 'update scott.emp t set t.sal = t.sal + 100 returning t.ename, t.sal into :1, :2';
execute immediate v_sqltext
returning bulk collect into v_ret, v_sal;
END;
可惜的是,在10g中,不支援多維陣列,比如以上例子中ename和sal我可以組成一個record型別,然後再將這個record型別封裝成陣列,如:
SQL> DECLARE
2 type rec_return is record(ename varchar2(255), sal number(10,2));
3 TYPE tbl_return IS TABLE OF rec_return index by pls_integer;
4 v_ret tbl_return;
5 v_sqltext varchar2(2000) := '';
6 BEGIN
7 v_sqltext := 'update scott.emp t set t.sal = t.sal + 100 returning t.ename, t.sal into :1, :2';
8 execute immediate v_sqltext
9 returning bulk collect into v_ret;
10 END;
11 /
DECLARE
type rec_return is record(ename varchar2(255), sal number(10,2));
TYPE tbl_return IS TABLE OF rec_return index by pls_integer;
v_ret tbl_return;
v_sqltext varchar2(2000) := '';
BEGIN
v_sqltext := 'update scott.emp t set t.sal = t.sal + 100 returning t.ename, t.sal into :1, :2';
execute immediate v_sqltext
returning bulk collect into v_ret;
END;
ORA-06550: 第 10 行, 第 5 列:
PLS-00429: RETURNING 子句不支援的功能
ORA-06550: 第 9 行, 第 5 列:
PL/SQL: Statement ignored
說明該種型別在動態語句的情況下不受支援。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/12932950/viewspace-619353/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Oracle動態語句中返回遊標Oracle
- sql語句中as的用法SQL
- sql語句中as的用法和作用SQL
- sql語句中select……as的用法SQL
- Oracle的語句中的提示Oracle
- Python中迴圈語句中的else用法Python
- 動態 SQL、EXECUTE IMMEDIATE、using、into、returningSQL
- 資料庫SQL語句中關於explain關鍵字的用法資料庫SQLAI
- ORACLE 動態語句的筆記Oracle筆記
- Oracle sql 語句中帶有特殊的字元處理OracleSQL字元
- Oracle SQL 語句中正規表示式的應用OracleSQL
- SQL語句中不同的連線JOIN及SQL中join的各種用法SQL
- 如何自動填充SQL語句中的公共欄位SQL
- oracle 對於SQL語句中物件名的解析順序OracleSQL物件
- Oracle Hints語句的用法Oracle
- sql語句中JOIN ON 的使用SQL
- MyBatis從插入語句中檢索自動生成的IDMyBatis
- sql語句中#{}和${}的區別SQL
- Oracle Case語句用法Oracle
- 在ORACLE SQL語句中,單引號和雙引號的使用OracleSQL
- Oracle動態執行語句(Execute Immediate)Oracle
- Oracle 迴圈呼叫動態SQL語句OracleSQL
- oracle動態sql語句處理(轉)OracleSQL
- SQL語句中exists和in的區別SQL
- SQL語句中not in 和not exist的區別SQL
- sql語句中as的意思是什麼SQL
- 在sql語句中替換Not In 的方法SQL
- sql語句中常量的處理SQL
- SQL 語句中關於 NULL 的那些坑SQLNull
- SQL語句中NULL的真實含義SQLNull
- 總結SQL語句中的優化提示SQL優化
- 查詢語句中escape的轉義字元字元
- MyBatis在SQL語句中取list的大小MyBatisSQL
- 複用Oracle資料字典解析出SQL語句中用到的所有表OracleSQL
- SQL語句中SELECT語句的執行順序SQL
- KunlunDB功能之insert/update/delete...returning語句delete
- MyBatis的使用三(在sql語句中傳值)MyBatisSQL
- vue中:is的用法,動態顯示需要的元件Vue元件