存储过程中execute immediate 'select ...
换成下面语句。dbms_output.put_line('SELECT COUNT(*) FROM ' || p_tableName || ' WHERE ' || p_fieldName || ' IS NULL '); 执行存储过程,看输出语句在sql*plus里面是否可以正常运行。

解决方案 »

  1.   

    输出:SELECT COUNT(*) FROM AAA WHERE fie1 IS NULL
    执行正常。
      

  2.   

    再看看有没有问题了
    create or replace  procedure SSSUSER.papp_canbe_pkfield
    (
        p_tablename in tapp_table.table_name%type,
        p_fieldname in tapp_field.field_name%type
    )
    as
       v_nullrowcount int;
       v_distinctrowcount int;
       v_allrowcount int;
       mystr varchar2(1000);
    begin  
       mystr := 'select count(*) from ' || p_tablename || ' where ' || p_fieldname || ' is null ';
       execute immediate mystr into v_nullrowcount ;
       dbms_output.put_line(to_char(v_nullrowcount));
    end;