PLSQL Language Referenc-PL/SQL動態SQL-動態SQL中重複的佔位符名名稱
動態SQL中重複的佔位符名名稱
如果在動態SQL中重複使用佔位符名,必須清楚佔位符與繫結變數關聯的方式是依賴於動態SQL的型別的。
n 動態SQL語句不是匿名塊或呼叫語句
則佔位符名重複是無關緊要的。在USING子句中的佔位符與繫結變數的關聯是通過位置,而不是名字。
sql_stmt := 'INSERT INTO payroll VALUES (:x, :x, :y, :x)'; EXECUTE IMMEDIATE sql_stmt USING a, b, c, d; -- 具體執行的SQL語句為 INSERT INTO payroll VALUES (a, b, c, d);
-- 把相同的繫結變數關聯到同一定位符,也是需要多次指定 EXECUTE IMMEDIATE sql_stmt USING a, a, b, a; -- 具體執行的SQL語句為 INSERT INTO payroll VALUES (a, a, b, a); |
n 動態SQL語句是匿名塊或呼叫語句
在USING子句中每1個唯一的佔位符,必須有一個對應的繫結變數。如果重複了佔位符名,則不需要重複對應的繫結變數。這些佔位符會引用同一個繫結變數。
練習:動態SQL中重複的佔位符
-- 11g12_07_05.prc CREATE PROCEDURE calc_stats ( w NUMBER, x NUMBER, y NUMBER, z NUMBER ) IS BEGIN DBMS_OUTPUT.PUT_LINE(w + x + y + z); END; |
-- 11g12_07_05.tst DECLARE a NUMBER := 4; b NUMBER := 7; plsql_block VARCHAR2(100); BEGIN plsql_block := 'BEGIN calc_stats(:x, :x, :y, :x); END;'; EXECUTE IMMEDIATE plsql_block USING a, b; -- 實際執行的為: calc_stats(a, a, b, a); END; -- 結果為:19 |
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/17013648/viewspace-1123734/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- PLSQL Language Referenc-PL/SQL動態SQL-何時需要動態SQLSQL
- PLSQL Language Referenc-PL/SQL動態SQL-本地動態SQL(EXECUTE IMMEDIATE語句)SQL
- PLSQL Language Referenc-PL/SQL動態SQL-練習:在動態SQL塊中呼叫子程式。SQL
- PLSQL Language Referenc-PL/SQL靜態SQL-靜態SQL的描述-偽列SQL
- PLSQL Language Referenc-PL/SQL靜態SQL-靜態SQL的描述-語句SQL
- PLSQL Language Referenc-PL/SQL靜態SQL-自治事務(二)SQL
- PLSQL Language Referenc-PL/SQL靜態SQL-游標變數SQL變數
- PLSQL Language Referenc-PL/SQL靜態SQL-靜態SQL的描述-游標-顯式游標SQL
- PLSQL Language Referenc-PL/SQL靜態SQL-事務處理和控制SQL
- PLSQL Language Referenc-PL/SQL靜態SQL-自治事務-控制自治事務SQL
- PLSQL Language Referenc-PL/SQL靜態SQL-查詢結果集處理SQL
- PLSQL Language Referenc-PL/SQL靜態SQL-事務處理和控制-savepoint語句SQL
- PLSQL Language Referenc-PL/SQL靜態SQL-游標變數-建立游標變數SQL變數
- PLSQL Language Referenc-PL/SQL靜態SQL-靜態SQL的描述-游標-開啟和關閉顯式游標SQL
- PLSQL Language Referenc-PL/SQL靜態SQL-事務處理和控制-隱式回滾SQL
- PLSQL Language Referenc-PL/SQL靜態SQL-游標變數-游標變數賦值SQL變數賦值
- PLSQL Language Referenc-PL/SQL動態SQL-練習:在USING子句中未初始化的變數表示NULLSQL變數Null
- PLSQL Language Referenc-PL/SQL靜態SQL-事務處理和控制-覆蓋預設的鎖SQL
- PLSQL Language Referenc-PL/SQL靜態SQL-帶有子查詢的查詢結果集處理SQL
- PLSQL Language Referenc-PL/SQL靜態SQL-游標變數-游標變數作為宿主變數SQL變數
- PLSQL Language Referenc-PL/SQL靜態SQL-游標變數-開啟和關閉游標變數SQL變數
- PLSQL Language Referenc-PL/SQL靜態SQL-游標變數-游標變數作為子程式引數SQL變數
- PLSQL Language Referenc-PL/SQL動態SQL-SQL隱碼攻擊-SQL隱碼攻擊技術-語句修改SQL
- PLSQL Language Referenc-PL/SQL靜態SQL-使用顯式游標OPEN-FETCH-CLOSE處理查詢結果集SQL
- 動態SQL-條件分頁SQL
- oracle procedure plsql 動態sql之動態傳遞表OracleSQL
- mybatis動態呼叫表名和欄位名MyBatis
- PLSQL Language Referenc-PL/SQL子程式-前向宣告SQL
- PLSQL Language Referenc-PL/SQL子程式-子程式呼叫SQL
- 名稱 ****不是有效的識別符號 sql符號SQL
- swift中的名稱空間及動態載入類Swift
- SqlServer中的動態SqlSQLServer
- PLSQL Language Referenc-PL/SQL子程式-使用子程式的原因SQL
- 動態表名
- 動態SQLSQL
- 動態SQL intoSQL
- PLSQL Language Referenc-PL/SQL集合和記錄-多維集合SQL
- PLSQL Language Referenc-PL/SQL集合和記錄-巢狀表SQL巢狀