PLSQL Language Referenc-PL/SQL動態SQL-本地動態SQL(EXECUTE IMMEDIATE語句)

LuiseDalian發表於2014-03-18

本地動態SQL

本地動態SQL可以使用EXECUTE IMMEDIATE語句處理大多數的動態SQL語句。

如果動態SQL語句是一個返回多行結果的SELECT語句,本地動態SQL給你如下選擇:

n  使用帶BULK COLLECT INTO子句的EXECUTE IMMEDIATE子句。

n  使用OPEN FORFETCHCLOSE語句。

 

SQL游標屬性在本地動態SQL INSERTUPDATEDELETE和單行SELECT語句之後,與靜態SQL的對應部分執行相同的工作。

0.1.1 EXECUTE IMMEDIATE語句

EXECUTE IMMEDIATE語句是本地動態SQL處理大多數動態SQL語句的方法。

如果動態SQL語句是自包含的(即沒有繫結變數佔位符,唯一能夠返回的結果就是錯誤),則EXECUTE IMMEDIATE不需要子句。

如果動態SQL語句包含繫結變數佔位符,則每一個佔位符必須在EXECUTE IMMEDIATE語句的適當子句中有對應的繫結變數:

n  如果動態SQL語句為最多返回一行的SQL語句,則使用INTO子句繫結輸出變數,使用USING子句繫結輸入變數。

n  如果動態SQL語句是返回多行結果的SELECT語句,則使用BULK COLLECT INTO子句定義定義輸出變數,使用USING子句定義輸入變數。

n  如果是沒有RETURNING INTO子句的DML語句,而不是SELECT,則將所有的繫結變數放在USING子句中

n  如果是帶有RETURNING INTO子句的DML語句,則將輸入繫結變數放在USING子句中,將輸出繫結變數放在RETURNING INTO子句中。

n  如果是一個匿名塊或一個CALL語句,則將所有繫結變數放在USING子句中。

 

n  如果動態SQL語句會呼叫一個子程式要確保:

u  對應於子程式引數佔位符的每一個繫結變數與子程式具有相同的引數傳遞模式,資料型別要與子程式引數型別相容。(參考練習7-1

u  不要有有SQL不支援型別的繫結變數。(如BOOLEAN,參考練習07-02

USING子句不能包括文字NULL 需要使用NULL的地方使用一個未初始化的變數。(參考練習07-03


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/17013648/viewspace-1123728/,如需轉載,請註明出處,否則將追究法律責任。

相關文章