Oracle動態執行語句(Execute Immediate)
------->>轉載於;http://sillyge.blog.163.com/blog/static/1769642082011043547773/
一。為什麼要使用動態執行語句?
由於在PL/SQL 塊或者儲存過程中只支援DML語句及控制流語句,並不支援DDL語句,所以Oracle動態執行語句便應允而生了。關於DDL與DML的區別,請參見:DDL語句與DML語句及DCL和TCL。
二。動態執行語句怎麼用?
動態執行語句代替了Oracle 8i中的DBMS_SQL Package包。
1)在PL/SQL中執行SQL語句,例如:
示例一:
BEGIN
EXECUTE IMMEDIATE 'select count(username) from user_users'; --DML(每條語句必須以分號結尾)
END;
示例二:
BEGIN
EXECUTE IMMEDIATE 'ALTER TABLE a RENAME TO EXAMPLE'; --DDL
END;
你可能會問不是隻DDL語句需要用動態語句執行嗎?是的,你說的完全正確。但是DML語句用動態語句執行也可以。
即:DDL語句只能用動態執行語句來執行,DML語句亦可用動態語句來執行。
2)使用using給動態語句傳值,例如:
DECLARE
e_name VARCHAR2(10); --宣告變數e_name
e_age INT; --宣告變數e_age
BEGIN
e_name := 'sillylaura'; --給變數e_name賦值
e_age := 21; --給變數e_age 賦值
EXECUTE IMMEDIATE 'insert into Example values(seq_add_by_one.nextval,:2,:3)' usinge_name,e_age; --DML END;
3)使用動態語句賦值(select 列名 into 變數 from ……)
DECLARE
temp INT;
BEGIN
EXECUTE IMMEDIATE 'SELECT COUNT(*) FROM dual' INTO temp; --DML
dbms_output.put_line(temp);
END;
4)傳遞並檢索值:into用在using之前。
DECLARE
temp INT;
test VARCHAR2(10);
BEGIN
test := 'ok';
EXECUTE immediate 'SELECT COUNT(*) FROM dual where dummy = :1 GROUP BY dummy' INTO temp USING test;
dbms_output.put_line(temp ||' '|| test);
EXCEPTION WHEN OTHERS THEN
dbms_output.put_line('It has no data!');
END;
三。動態語句小結
- DDL語句只能用動態執行語句來執行,DML語句亦可用動態語句來執行。
- 在使用select……into子句為變數賦值時,into字句必須寫在單引號外面。
- 在同時使用select……into子句和using時,注意二者的順序:into用在using之前,且都在單引號外面。
- 注意寫上必要的異常錯誤處理。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/29119536/viewspace-1150057/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- oracle execute immediate動態sql組合執行comment小記OracleSQL
- 複習execute immediate動態sql語法SQL
- Oracle EXECUTE IMMEDIATE語句裡面的引號處理Oracle
- PLSQL Language Referenc-PL/SQL動態SQL-本地動態SQL(EXECUTE IMMEDIATE語句)SQL
- PL/SQL 中 execute immediate,select 語句沒有into 執行未報錯SQL
- EXECUTE IMMEDIATE 呼叫動態過程
- 動態 SQL、EXECUTE IMMEDIATE、using、into、returningSQL
- EXECUTE IMMEDIATE動態SQL的使用總結SQL
- Mybatis 動態執行SQL語句MyBatisSQL
- execute immediate 語法小結
- 儲存過程執行EXECUTE IMMEDIATE沒反應儲存過程
- execute immediate的簡單用法(oracle)Oracle
- SQL SERVER 中構建執行動態SQL語句SQLServer
- EXECUTE IMMEDIATE dynamic sql in procedureSQL
- ORACLE 動態語句的筆記Oracle筆記
- 後臺執行SQL語句(oracle)SQLOracle
- Oracle SQL語句執行步驟OracleSQL
- Oracle 迴圈呼叫動態SQL語句OracleSQL
- oracle動態sql語句處理(轉)OracleSQL
- 獲取oracle正在處於等待狀態的sql語句的執行計劃的語句OracleSQL
- oracle使用profiler分析語句執行效率Oracle
- Oracle SQL 語句的執行過程OracleSQL
- java連線oracle執行sql語句JavaOracleSQL
- 查詢Oracle正在執行的sql語句及執行該語句的使用者OracleSQL
- EXECUTE IMMEDIATE 儲存過程中 許可權不足及EXECUTE IMMEDIATE的除錯避坑儲存過程除錯
- 查詢Oracle正在執行和執行過的SQL語句OracleSQL
- 查詢Oracle正在執行的SQL語句OracleSQL
- 理解oracle執行sql語句的過程OracleSQL
- oracle 對比sql語句執行環境OracleSQL
- 記錄ORACLE語句的執行時間Oracle
- 英語的靜態句和動態句
- Oracle執行語句跟蹤 使用sql trace實現語句追蹤OracleSQL
- 儲存過程中慎用 execute immediate儲存過程
- mySQL 執行語句執行順序MySql
- ABAP 動態where語句
- 關於動態語句
- 用動態SQL語句SQL
- 動態SQL語句 (轉)SQL