怎么解决呀?

解决方案 »

  1.   

    把代码贴出来
    执行SHOW ERROR 显示错误信息
      

  2.   

    我也尝试过,但失败了,可能不能将表名作为参数的。
    表名传进来是为了拼在sql语句里,但oracle却不认识。
      

  3.   

    create or replace procedure getSeq(
    rResult out integer,--输出消息代码
    rMesg out varchar2,--消息正文
    iTableName out varchar2,--表名
    iFieldName out varchar2--字段名
    )
    ISiTemp integer :=0;BEGIN
    rResult := 0;
    rMesg := '';
    select count(*) into iTemp from into iTableName;
    if iTemp!=0 then
      select max(iFieldName) into iTemp from iTableName;
    end if;
    rMesg := TO_CHAR(iTemp+1);
    END ;错误消息为:
    PL/SQL: ORA-00903: 表名无效
    也就是iTableName不存在,因为它确实不存在,怎么办?
    在线等待!
      

  4.   

    SQL> select * from test1;        ID ZYZ1               P1 DOCTIME
    ---------- ---------- ---------- ----------
             1 dfdf                2
             1                     2 01-5Ô -02
             1                     2 20-8Ô -02
             1 df0                 2SQL> CREATE OR REPLACE PROCEDURE SCOTT.testtablename (p_tablename in varchar2)
      2  as
      3    type v_refcursor is ref cursor;
      4    v_temp v_refcursor;
      5    i number;
      6  begin
      7   open v_temp for 'select id from ' || p_tablename || ' where id >0';
      8   loop
      9      fetch v_temp into i;
     10      exit when v_temp%notfound;
     11      dbms_output.put_line('i:' || i || ';');
     12    end loop;
     13  end;
     14  /Procedure created.SQL> set serveroutput on
    SQL> exec testtablename('test1')
    i:1;
    i:1;
    i:1;
    i:1;PL/SQL procedure successfully completed.
      

  5.   

    ref cursor它的使用受到oracle版本的限制,应该是8i或以上
      

  6.   

    create or replace procedure getSeq(
    rResult out integer,--输出消息代码
    rMesg out varchar2,--消息正文
    iTableName in varchar2,--表名
    iFieldName in varchar2--字段名
    )
    IS
    i_sql varchar2(500);
    iTemp integer :=0;BEGIN
    rResult := 0;
    rMesg := '';
    i_sql:='select count(*) from '||iTableName;
    execute immediate i_sql into iTemp ;
    if iTemp!=0 then
      i_sql:='select max('||iFieldName||') from '||iTableName;
      execute immediate i_sql into iTemp;
    end if;
    rMesg := TO_CHAR(iTemp+1);
    END ;
      

  7.   

    还有用dbms_sql包也可以实现动态的sql