请问各位大虾 我想写一个存储过程,然后将表名作为参数传递给该存储过程,请问可以将一个表名传递给存储过程吗

解决方案 »

  1.   

    可以,但是要使用该表名的话要使用动态sql
    execute immediate
      

  2.   

    可以呀,比如传进的是s_table_name;那么可以这样操作:
    Declare
    str varchar2(1000);
    Begin
    str:= 'select * from '||s_table_name;
    execute immediate str;
    End;
    就可以了
      

  3.   

    可以的,我以前做的例子[code=SQ]
    CREATE OR REPLACE PROCEDURE P_GETROWCOUNT(TABLE_NAME IN VARCHAR2,
                                              ROWCOUNT   OUT NUMBER,
                                              ORET       OUT NUMBER) IS
      TABNUM NUMBER;
      NOROW EXCEPTION;
      SQLSTAT VARCHAR2(200);
    BEGIN
      SQLSTAT := 'select count(*)  from user_tables where upper(table_name) = ' ||
                 UPPER(TABLE_NAME);
      EXECUTE IMMEDIATE SQLSTAT
        INTO TABNUM;
      IF TABNUM = 0 THEN
        RAISE NOROW;
      ELSE
        ORET    := 0;
        SQLSTAT := 'SELECT COUNT(*) FROM ' || TABLE_NAME;
        EXECUTE IMMEDIATE REPLACE(SQLSTAT, '''')
          INTO ROWCOUNT;
      END IF;EXCEPTION
      WHEN NOROW THEN
        ORET     := SQLCODE;
        ROWCOUNT := 0;
      WHEN OTHERS THEN
        DBMS_OUTPUT.PUT_LINE(SQLCODE || '' || SQLERRM);
    END;[/code]