Oracle_獲取動態sql的值 EXECUTE IMMEDIATE.. INTO ..
BEGIN
DECLARE
ls_sql VARCHAR2(4000);
ln_cnt INT;
BEGIN
ln_cnt := 0;
ls_sql := 'select count(*) from (select 1 from dual) a ';
EXECUTE IMMEDIATE ls_sql
INTO ln_cnt;
DBMS_OUTPUT.PUT_LINE(ln_cnt);
END;
END;
output
1
ORACLE EXECUTE IMMEDIATE 用法EXECUTE IMMEDIATE 代替了以前Oracle8i中DBMS_SQL package包.
它解析並馬上執行動態的SQL語句或非執行時建立的PL/SQL塊.動態建立和執行SQL語句效能超前,EXECUTE IMMEDIATE的目標在於減小企業費用並獲得較高的效能,較之以前它相當容易編碼.儘管DBMS_SQL仍然可用,但是推薦使用EXECUTE IMMEDIATE,因為它獲的收益在包之上。
-- 使用技巧
1. EXECUTE IMMEDIATE將不會提交一個DML事務執行,應該顯式提交
如果通過EXECUTE IMMEDIATE處理DML命令,
那麼在完成以前需要顯式提交或者作為EXECUTE IMMEDIATE自己的一部分.
如果通過EXECUTE IMMEDIATE處理DDL命令,它提交所有以前改變的資料
2. 不支援返回多行的查詢,這種互動將用臨時表來儲存記錄(參照例子如下)或者用REF cursors.
3. 當執行SQL語句時,不要用分號,當執行PL/SQL塊時,在其尾部用分號.
4. 在Oracle手冊中,未詳細覆蓋這些功能。
下面的例子展示了所有用到Execute immediate的可能方面.希望能給你帶來方便.
5. 對於Forms開發者,當在PL/SQL 8.0.6.3.版本中,Forms 6i不能使用此功能.