create or replace procedure SP_test_3 ( V_systab IN varchar2) 
AS 
Begin
             execute immediate 'insert into LoginInfo_1(UserSN,ServerNum,Time,Type,IP)
                                select UserSN,ServerNum,Time,Type,IP
                                from  '|| V_systab || '
                                ) b';
END SP_test_3;SQL> exec SP_test_3(logininfo100);
 
begin SP_test_3(logininfo100); end;
 
ORA-06550: line 2, column 17:
PLS-00357: Table,View Or Sequence reference 'LOGININFO100' not allowed in this context
ORA-06550: line 2, column 7:
PL/SQL: Statement ignored
 怎么回事?

解决方案 »

  1.   

    要加引号:
    exec SP_test_3('logininfo100'); 
      

  2.   

    exec SP_test_3('logininfo100');
     
    begin SP_test_3('logininfo100'); end;
     
    ORA-00933: SQL command not properly ended
    ORA-06512: at "ODS.SP_TEST_3", line 4
    ORA-06512: at line 2
      

  3.   

    -- 把)b去掉,好像没用吧。然后ODS.SP_TEST_3是什么?触发器?
    CREATE OR REPLACE PROCEDURE SP_TEST_3(V_SYSTAB IN VARCHAR2) AS
    BEGIN
      EXECUTE IMMEDIATE 'INSERT INTO LOGININFO_1(USERSN,SERVERNUM,TIME,TYPE,IP) 
                                    SELECT USERSN,SERVERNUM,TIME,TYPE,IP 
                                    FROM  ' || V_SYSTAB || ' ';
    END SP_TEST_3;
      

  4.   

               execute immediate 'insert into LoginInfo_1(UserSN,ServerNum,Time,Type,IP) 
                                    select UserSN,ServerNum,Time,Type,IP 
                                    from  '|| V_systab || ' 
                                    ) b'; 
      

  5.   

    检查一下表或视图 LOGININFO100
      

  6.   

    -- 再试试看这样:
    CREATE OR REPLACE PROCEDURE SP_TEST_3(V_SYSTAB IN VARCHAR2) AS
    BEGIN
      EXECUTE IMMEDIATE 'INSERT INTO LOGININFO_1(USERSN,SERVERNUM,TIME,TYPE,IP) SELECT USERSN,SERVERNUM,TIME,TYPE,IP FROM  ' || V_SYSTAB || ' ';
    END SP_TEST_3;