在PLSQL中使用EXECUTE IMMEDIATE語句處理動態(tài)SQL語句。
創(chuàng)新互聯(lián)建站專注于企業(yè)成都全網(wǎng)營銷、網(wǎng)站重做改版、夏河網(wǎng)站定制設計、自適應品牌網(wǎng)站建設、HTML5、成都做商城網(wǎng)站、集團公司官網(wǎng)建設、外貿(mào)營銷網(wǎng)站建設、高端網(wǎng)站制作、響應式網(wǎng)頁設計等建站業(yè)務,價格優(yōu)惠性價比高,為夏河等各大城市提供網(wǎng)站開發(fā)制作服務。
語法如下:
EXECUTE IMMEDIATE dynamic_string
[INTO {define_variable[, define_variable]... | record}]
[USING [IN | OUT | IN OUT] bind_argument
[, [IN | OUT | IN OUT] bind_argument]...]
[{RETURNING | RETURN} INTO bind_argument[, bind_argument]...];
dynamic_string是代表一條SQL語句或一個PL/SQL塊的字符串表達式,
define_variable是用于存放被選出的字段值的變量,
record是用戶定義或%ROWTYPE類型的記錄,用來存放被選出的行記錄。
輸入bind_argument參數(shù)是一個表達式,它的值將被傳入(IN模式)或傳出(OUT模式)或先傳入再傳出(IN OUT模式)到動態(tài)SQL語句或是PL/SQL塊中。一個輸出bind_argument參數(shù)就是一個能保存動態(tài)SQL返回值的變量。
除了多行查詢外,動態(tài)字符串可以包含任何SQL語句(不含終結符)或PL/SQL塊(含終結符)。
字符串中可以包括用于參數(shù)綁定的占位符。
但是,不可以使用綁定參數(shù)為動態(tài)SQL傳遞模式對象。
在用于單行查詢時,INTO子句要指明用于存放檢索值的變量或記錄。
對于查詢檢索出來的每一個值,INTO子句中都必須有一個與之對應的、類型兼容的變量或字段。
在用于DML操作時,RETURNING INTO子句要指明用于存放返回值的變量或記錄。
對于DML語句返回的每一個值,INTO子句中都必須有一個與之對應的、類型兼容的變量或字段。
我們可以把所有的綁定參數(shù)放到USING子句中。默認的參數(shù)模式是IN。
對于含有RETURNING子句的DML語句來說,我們可以把OUT參數(shù)放到RETURNING INTO之后,并且不用指定它們的參數(shù)模式,因為默認就是OUT。
如果我們既使用了USING又使用RETURNING INTO,那么,USING子句中就只能包含IN模式的參數(shù)了。
運行時,動態(tài)字符串中的綁定參數(shù)會替換相對應的占位符。所以,每個占位符必須與USING子句和/或RETURNING INTO子句中的一個綁定參數(shù)對應。我們可以使用數(shù)字、字符和字符串作為綁定參數(shù),但不能使用布爾類型(TRUE,F(xiàn)ALSE和NULL)。要把空值傳遞給動態(tài)字符串,我們就必須使用工作區(qū)。
動態(tài)SQL支持所有的SQL類型。所以,定義變量和綁定變量都可以是集合、LOB,對象類型實例和引用。
作為一項規(guī)則,動態(tài)SQL是不支持PL/SQL特有的類型的。這樣,它就不能使用布爾型或索引表。
我們可以重復為綁定變量指定新值執(zhí)行動態(tài)SQL語句。但是,每次都會消耗很多資源,因為EXECUTE IMMEDIATE在每次執(zhí)行之前都需要對動態(tài)字符串進行預處理。
select * from table_1 where length(某一個選項) =
( SELECT MIN ( length(某一個選項) ) FROM table_1 )
可以用程序?qū)崿F(xiàn)。
取第一列的名稱:SELECT A.CNAME FROM COL A WHERE A.COLNO=1 AND A.TNAME='TABLENAME';