sql >> データベース >  >> RDS >> Oracle

seqとtriggerを使用したOracleの自動インクリメント-無効なSQLステートメント

    問題は、クライアントツールがコマンドの最後としてすべてのセミコロンを読み取っていて、PL / SQLコード(ステートメントターミネータとしてセミコロンが必要)がサーバーに誤って送信されていることだと思います。

    セミコロンを削除すると、ステートメントはサーバーに正しく送信されますが、PL / SQLが正しくないため、無効なオブジェクトになってしまいます。

    SQLFiddleで問題を再現しました。次に、ステートメントターミネーターを/に変更します ;の代わりに スラッシュを使用して各ステートメントを実行するようにコードを変更しましたが、エラーなしで機能しました:

    CREATE TABLE proposals (
        proposal_id INT NOT NULL,
        target_audience VARCHAR2(50) NOT NULL,
        line_of_business VARCHAR2(50),
        activity_description VARCHAR2(250) NOT NULL,
        cost NUMBER(19, 4),
        comments VARCHAR2(250),
        objectives_and_results VARCHAR2(250),
        PRIMARY KEY (proposal_id)
    )
    /
    
    CREATE SEQUENCE proposals_seq MINVALUE 1 
    START WITH 1 INCREMENT BY 1 CACHE 10
    /
    
    CREATE OR REPLACE TRIGGER proposals_before_insert
    BEFORE INSERT ON proposals FOR EACH ROW
    BEGIN
        select proposals_seq.nextval into :new.proposal_id from dual;
    END;
    /
    


    1. ダウンロードするファイルがない場合にSSISFTPタスクが失敗しないようにするにはどうすればよいですか?

    2. MySQLUDFをインストールできません

    3. Java MYSQLプリペアドステートメントエラー:構文をチェックして「?」の近くで使用します1行目

    4. SQL IDシーケンスが同期しなくなるのはなぜですか(特にPostgresを使用)?