create or replace function getbh(tab_name in varchar2,field_name in varchar2) return number is
    instanceid:=0 number;
v_str varchar2(4000);
    begin 
    v_str:='select max('||field_name || 'into '|| instanceid  ||'from '|| tab_name ';
execute immedate v_str into instanceid;
    return instanceid;
     end;
/

解决方案 »

  1.   

    谢谢楼上的朋友,我修改了一下后:
    create or replace function getbh(tab_name in varchar2,field_name in varchar2) return number is
        instanceid number :=0;
        v_str varchar2(4000);
        begin 
        v_str:='select max('||field_name || 'into '|| instanceid  ||'from '|| tab_name;
    execute immedate v_str into instanceid;
        return instanceid;
         end;
    我执行select getbh('dept','deptno') from dual;报告如下错误:
    ERROR 位于第 1 行:
    ORA-00905: 缺少关键字
    ORA-06512: 在"SCOTT.GETBH", line 6
    ORA-06512: 在line 1
    然后我修改v_str:='select max('||field_name || 'from '|| tab_name;
    程序运行正确,我现在不明白,在这里的SQL语句为什么不能用into给instanceid赋值??
    并且它和下面的语法有什么不同吗?
    create or replace function getbh(tab_name in varchar2,field_name in varchar2) return number is
        instanceid:=0 number;
        begin 
        select max(deptno) into  instanceid  from  dept;
        return instanceid;   
            end;
    这种执行方式和execute immedate v_str有什么不同??