PL/SQL 中 execute immediate,select 語句沒有into 執行未報錯
declare
v_str_sql varchar2(500);
v_max_incident_id number;
v_seq_val number ;
v_seq_val2 number ;
v_diff number ;
v_offset number ;
begin
select incident_number into v_max_incident_id from cs.cs_incidents_all_b sr
where sr.incident_id =(select max(incident_id) from cs.cs_incidents_all_b);
select CS.CS_INCIDENTS_NUMBER_S.nextval into v_seq_val from dual;
if v_seq_val < v_max_incident_id then
v_diff:= v_max_incident_id - v_seq_val ;
v_offset:= v_diff + 101 ;
v_str_sql:='alter sequence CS.CS_INCIDENTS_NUMBER_S increment by '||v_offset||' nocache' ;
execute immediate v_str_sql;
end if ;
v_str_sql:='select CS.CS_INCIDENTS_NUMBER_S.nextval from dual';
execute immediate v_str_sql into v_seq_val2 ;
v_str_sql:='alter sequence CS.CS_INCIDENTS_NUMBER_S increment by 1 cache 100 ' ;
execute immediate v_str_sql;
end;
如上的pl/sql 是將某個sequence 修改為某個max值, 其中 execute immediate v_str_sql into v_seq_val2 部分, 如果忘記寫
後面的 into v_seq_val2 ,執行過程中也不會報錯, 好像很順利,但是實際上這個對於sequence至關重要的 select nextval 語句
沒有被執行,導致sequence 沒有修改為正確的值。 如果在這兩句紅色的語句被替換為等價的“select CS.CS_INCIDENTS_NUMBER_S.nextval from dual” 在PL/SQL中執行,而不使用 execute immediate , 那麼就會報錯:PLS-00428 。 所以使用execute immediate 的時候
需要特別注意。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/35489/viewspace-1291993/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Oracle動態執行語句(Execute Immediate)Oracle
- PLSQL Language Referenc-PL/SQL動態SQL-本地動態SQL(EXECUTE IMMEDIATE語句)SQL
- 儲存過程執行EXECUTE IMMEDIATE沒反應儲存過程
- SQL Server中SELECT語句執行順序解析SQLServer
- 利用pl/sql執行本地的sql檔案中的sql語句SQL
- 複習execute immediate動態sql語法SQL
- SQL語句中SELECT語句的執行順序SQL
- EXECUTE IMMEDIATE dynamic sql in procedureSQL
- SQL Select語句邏輯執行順序SQL
- Oracle EXECUTE IMMEDIATE語句裡面的引號處理Oracle
- oracle execute immediate動態sql組合執行comment小記OracleSQL
- execute immediate 語法小結
- EXECUTE IMMEDIATE 儲存過程中 許可權不足及EXECUTE IMMEDIATE的除錯避坑儲存過程除錯
- Select語句執行順序
- SQL 查詢總是先執行SELECT語句嗎?你們都錯了!SQL
- SQL SELECT 語句SQL
- 在事務中執行sql語句SQL
- 在nhibernate中執行SQL語句SQL
- sql語句批量執行SQL
- PL/SQL與DDL語句SQL
- 執行SQL語句遇到3113錯誤SQL
- SQL update select語句SQL
- GOTO語句在PL/SQL中的應用GoSQL
- SQL SERVER 中構建執行動態SQL語句SQLServer
- PL/SQL 動態sql語句例SQL
- 動態 SQL、EXECUTE IMMEDIATE、using、into、returningSQL
- EXECUTE IMMEDIATE動態SQL的使用總結SQL
- sql語句如何執行的SQL
- SQL語句執行順序SQL
- 執行大的sql語句SQL
- toad執行sql語句SQL
- PL/SQL 條件控制語句SQL
- PL/SQL迴圈控制語句SQL
- sql select語法執行順序SQL
- java中執行sql與pl/sql dev中執行sql快慢差距大原因JavaSQLdev
- SQL Server SQL語句執行順序SQLServer
- 執行指令碼diagcollection.pl報錯指令碼GC
- pl/sql 過程中變數未初始化導致update語句失敗SQL變數