今日、私は匿名ブロック内でシーケンスを作成しようとしました。私の要件は、シーケンスがmaxvalueに達したときに自動的に削除されるべきときです。したがって、以下のコードを実行しましたが、 "PL/SQL:ORA-02289:sequence does not exist"のようなエラーが表示されます。PLSQLの匿名ブロックでシーケンスを作成および削除することができません
CODE:
DECLARE
V_NUM NUMBER:=0;
V_QUERY VARCHAR2(2000);
CNT NUMBER := 0;
BEGIN
V_QUERY:= 'CREATE SEQUENCE SEQ_GEN START WITH 100 INCREMENT BY 10 MAXVALUE 200';
EXECUTE IMMEDIATE 'DROP SEQUENCE SEQ_GEN';
EXECUTE IMMEDIATE V_QUERY;
FOR I IN 1..11 LOOP
SELECT SEQ_GEN.NEXTVAL INTO V_NUM FROM DUAL;
DBMS_OUTPUT.PUT_LINE(V_NUM);
IF V_NUM >= 200 THEN
EXECUTE IMMEDIATE 'DROP SEQUENCE SEQ_GEN';
DBMS_OUTPUT.PUT_LINE('sequence has reached maximum value');
END IF;
END LOOP;
SELECT COUNT(1) INTO CNT FROM USER_SEQUENCES WHERE SEQUENCE_NAME = 'SEQ_GEN';
DBMS_OUTPUT.PUT_LINE(CNT);
EXCEPTION
WHEN OTHERS THEN
DBMS_OUTPUT.PUT_LINE(SQLERRM);
END;
/
この問題の解決に役立つ人はいますか?
行7は、行8で作成される前にシーケンスを削除しようとします。これをデバッグするには、例外ブロックを削除します。デフォルトでは、Oracleは実行を停止し、エラーと行番号を出力します。これにより、問題を迅速に指摘する必要があります。 –