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;