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;