我写了一个求任意表的id最大值的函数
如下:
create or replace function GetMaxId( tab_prid varchar2, tab_name varchar2 )
return number as
curid number(10);
str_sql varchar(500);
begin
str_sql := 'select max(:1) + 1 into :2 from :3';
execute immediate str_sql using tab_prid, curid, tab_name;
return curid;
end;调用如下:
declare
num number(10);
begin
num := GetMaxId('pay_id','t_payout');
dbms_output.put_line(num);
end;
结果显示无效的主机/绑定变量名,各位看看该 怎么改一下?
如下:
create or replace function GetMaxId( tab_prid varchar2, tab_name varchar2 )
return number as
curid number(10);
str_sql varchar(500);
begin
str_sql := 'select max(:1) + 1 into :2 from :3';
execute immediate str_sql using tab_prid, curid, tab_name;
return curid;
end;调用如下:
declare
num number(10);
begin
num := GetMaxId('pay_id','t_payout');
dbms_output.put_line(num);
end;
结果显示无效的主机/绑定变量名,各位看看该 怎么改一下?
在begin后面加上 curid := 0;
str_sql := 'select max(:1) + 1 from :3';
execute immediate str_sql using tab_prid, tab_name into curid;
return curid;
end;
这里是对动态sql的错误用法 using这里只能替代sql中的动态部分,比如过瘾的值,而静态部分是不能替代的,比如col名,表名,schenma名,你这里很好改,把变量拼进去就可以了
str_sql := 'select max('|| tab_prid ||') + 1 from '||tab_nameinto;呵呵呵,怎么还差一个变量哟。然后直接
execute immediate str_sql就可以了。