-------------------------------------------------------------------CREATE OR REPLACE FUNCTION DropST (st_name IN CHAR, st_type IN CHAR) RETURN NUMBER IS
PRAGMA autonomous_transaction;
 chk_var NUMBER;
BEGINIF st_type = 'T' THEN   SELECT COUNT(*) INTO chk_var FROM user_tab WHERE t_name = st_name;
   IF chk_var > 0 THEN
      EXECUTE IMMEDIATE 'drop tab '||st_name;
   RETURN 1;
   END IF;ELSIF st_type = 'S' THEN   SELECT COUNT(*) INTO chk_var FROM user_seq WHERE s_name = st_name;
   IF chk_var > 0 THEN
      EXECUTE IMMEDIATE 'drop seq '||st_name;
   RETURN 1;
   END IF;END IF;
 
RETURN 0;END DropST;/SELECT DropST('ABC', 'T') FROM DUAL ;
--------------------------------------------------------------------
报错:Package or function DropST is in an invalid state

解决方案 »

  1.   

    CREATE OR REPLACE FUNCTION DropST (st_name varchar2, st_type  varchar2) RETURN NUMBER IS
     chk_var NUMBER;
    BEGIN
    我的意见PRAGMA autonomous_transaction;--这行什么意思啊?问下
      

  2.   

    请问目的是要在函数里drop table或者sequence,然后返回个值么?
    如果是,应该是因为你的drop语句写错了,需要写完整的“table”和“sequence”
      

  3.   

    哦,对的。
    改了,
    EXECUTE IMMEDIATE 'drop table '||st_name;EXECUTE IMMEDIATE 'drop sequence '||st_name;还是同样的错误
      

  4.   

    回家了 没办法测试 把st_name的类型该成varchar2试试