oracle如何實現動態字段別名?
在PLSQL中使用EXECUTEIMMEDIATE語句處理動態SQL語句。
語法如下:
EXECUTEIMMEDIATEdynamic_string
[INTO{define_variable[,define_variable]...|record}]
[USING[IN|OUT|INOUT]bind_argument
[,[IN|OUT|INOUT]bind_argument]...]
[{RETURNING|RETURN}INTObind_argument[,bind_argument]...];
dynamic_string是代表一條SQL語句或一個PL/SQL塊的字符串表達式,
define_variable是用于存放被選出的字段值的變量,
record是用戶定義或%ROWTYPE類型的記錄,用來存放被選出的行記錄。
輸入bind_argument參數是一個表達式,它的值將被傳入(IN模式)或傳出(OUT模式)或先傳入再傳出(INOUT模式)到動態SQL語句或是PL/SQL塊中。一個輸出bind_argument參數就是一個能保存動態SQL返回值的變量。
除了多行查詢外,動態字符串可以包含任何SQL語句(不含終結符)或PL/SQL塊(含終結符)。
字符串中可以包括用于參數綁定的占位符。
但是,不可以使用綁定參數為動態SQL傳遞模式對象。
在用于單行查詢時,INTO子句要指明用于存放檢索值的變量或記錄。
對于查詢檢索出來的每一個值,INTO子句中都必須有一個與之對應的、類型兼容的變量或字段。
在用于DML操作時,RETURNINGINTO子句要指明用于存放返回值的變量或記錄。
對于DML語句返回的每一個值,INTO子句中都必須有一個與之對應的、類型兼容的變量或字段。
我們可以把所有的綁定參數放到USING子句中。默認的參數模式是IN。
對于含有RETURNING子句的DML語句來說,我們可以把OUT參數放到RETURNINGINTO之后,并且不用指定它們的參數模式,因為默認就是OUT。
如果我們既使用了USING又使用RETURNINGINTO,那么,USING子句中就只能包含IN模式的參數了。
運行時,動態字符串中的綁定參數會替換相對應的占位符。所以,每個占位符必須與USING子句和/或RETURNINGINTO子句中的一個綁定參數對應。我們可以使用數字、字符和字符串作為綁定參數,但不能使用布爾類型(TRUE,FALSE和NULL)。要把空值傳遞給動態字符串,我們就必須使用工作區。
動態SQL支持所有的SQL類型。所以,定義變量和綁定變量都可以是集合、LOB,對象類型實例和引用。
作為一項規則,動態SQL是不支持PL/SQL特有的類型的。這樣,它就不能使用布爾型或索引表。
我們可以重復為綁定變量指定新值執行動態SQL語句。但是,每次都會消耗很多資源,因為EXECUTEIMMEDIATE在每次執行之前都需要對動態字符串進行預處理。