我写了一个求任意表的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;
结果显示无效的主机/绑定变量名,各位看看该 怎么改一下?

解决方案 »

  1.   

    curid没有初始化
    在begin后面加上 curid := 0;
      

  2.   

    max(:1) + 1  字符+数字?
      

  3.   

    begin 
          str_sql := 'select max(:1) + 1 from :3'; 
          execute immediate str_sql using tab_prid, tab_name into curid
          return curid; 
    end; 
      

  4.   


    这里是对动态sql的错误用法 using这里只能替代sql中的动态部分,比如过瘾的值,而静态部分是不能替代的,比如col名,表名,schenma名,你这里很好改,把变量拼进去就可以了
    str_sql := 'select max('|| tab_prid ||') + 1 from '||tab_nameinto;呵呵呵,怎么还差一个变量哟。然后直接
    execute immediate str_sql就可以了。