DECLARE
inFieldName varchar(100);
str varchar(100);
inMaxId varchar(100);
inTableName varchar(100);
BEGIN
  inFieldName := 'colName';
  inTableName := 'TableName';
   str := 'select max(:inFieldName) into :inMaxId from '  || inTableName;
   EXECUTE IMMEDIATE str using inFieldName,inMaxId;
   Dbms_output.put_line(inMaxId); 
END;
错误提示:ORA-01006绑定变量不存在。

解决方案 »

  1.   

    DECLARE
    inFieldName varchar(100);
    str varchar(100);
    inMaxId varchar(100);
    inTableName varchar(100);
    BEGIN
      inFieldName := 'colName';
      inTableName := 'TableName';
       str := 'select max('||inFieldName||') into :inMaxId from '  || inTableName;
       EXECUTE IMMEDIATE str using out inMaxId;
       Dbms_output.put_line(inMaxId); 
    END;
      

  2.   


    DECLARE
    inFieldName varchar(100);
    str varchar(100);
    inMaxId varchar(100);
    inTableName varchar(100);
    BEGIN
      inFieldName := 'colName';
      inTableName := 'TableName';
       str := 'select max(&inFieldName) from &inTableName';
       EXECUTE IMMEDIATE str  into inMaxId;
       Dbms_output.put_line(inMaxId);
    END;Enter value for infieldname: empno
    Enter value for intablename: emp
    old   9:    str := 'select max(&inFieldName) from &inTableName';
    new   9:    str := 'select max(empno) from emp';
    7934PL/SQL procedure successfully completed.
      

  3.   

    SQL> set serveroutput on
    SQL> 
    SQL> DECLARE
      2  inFieldName varchar(100);
      3  str varchar(100);
      4  inMaxId varchar(100);
      5  inTableName varchar(100);
      6  BEGIN
      7    inFieldName := 1;
      8    inTableName := 'dual';
      9     str := 'select max('||inFieldName||')  from '  || inTableName;
     10     EXECUTE IMMEDIATE str into inMaxId;
     11     Dbms_output.put_line(inMaxId);
     12  END;
     13  /
     
    1
     
    PL/SQL procedure successfully completed
     
    SQL> 
      

  4.   

    谢谢  zhuomingwang,OK了。看来是自己语法不过关。