oracle 中動態SQL的使用

oracle 動態SQL語法: Excute immediate 動態SQL語句 using 綁定參數列表 returning into 輸出參數列表;

對這一語句作如下說明:

  1)動態SQL是指DDL和不確定的DML(即帶參數的DML)

  2)綁定參數列表爲輸入參數列表,即其類型爲in類型,在運行時刻與動態SQL語句中的參數(實際上佔位符,可以理解爲函數裏面的形式參數)進行綁定。

  3)輸出參數列表爲動態SQL語句執行後返回的參數列表。

  4)由於動態SQL是在運行時刻進行確定的,所以相對於靜態而言,其更多的會損失一些系統性能來換取其靈活性。

小技巧:這裏所說的returning into 並不是對所有語句都有效果。他只針對 insert,update,delete語句。如果是select 語句。則其語法如下:
     Excute immediate 動態SQL語句 into 輸出參數列表 using 綁定參數列表;

實際項目中使用示例:

create or replace function get_number_zws( tableName varchar2, filed varchar2, condition varchar2,orderby varchar2)
return number is
       returnvalue number; --返回值
       countrow number;      --總記錄行數
       rowindex number;      --中位數所在位置
       strsql1 varchar2(4000); --統計sql
       strsql2 varchar2(4000); --查詢sql
/*
功能:返回類型爲數字型的序列的中位數
參數:
      tableName 數據表
      filed: 產生中位數的字段
      condition 查詢條件字符串
      orderby 排序字符串
作者:李國軍
聯繫方式:82729536
時間:2012-11-26
*/
begin
     strsql1 := 'select count(1) from '||tableName||' where 1=1 and '||condition;
     dbms_output.put_line(strsql1);
     execute immediate strsql1
     into countrow;
     if mod(countrow,2) = 0 then
        begin
             rowindex := countrow/2;
             strsql2 := 'select avg('||filed||') from ( select '||filed||',rownum sn from '||tableName||' where 1=1 and '||condition||' order by '||orderby||') where sn between '|| rowindex ||' and '|| rowindex+1;
             execute immediate strsql2
             into returnvalue;
        end;
     else
         begin
              rowindex := floor(countrow/2)+1;
              strsql2 := 'select '||filed||' from ( select '||filed||',rownum sn from '||tableName||' where 1=1 and '||condition||' order by '||orderby||') where sn ='|| rowindex;
              execute immediate strsql2
             into returnvalue;
             --dbms_output.put_line(strsql2);
         end;
     end if;
     return returnvalue;
end;


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章