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

新しいテーブルが作成されるときに挿入する前にID列値を生成するトリガーを作成する

    スキーマ名をDDLに入れれば、問題なく動作します。

    SQL> connect sys/test as sysdba
    Connected.
    SQL> CREATE OR REPLACE TRIGGER after_create_table_trigger
      2  AFTER CREATE ON TEST.SCHEMA
      3  DECLARE
      4  TABLE_NAME VARCHAR2(100);
      5  BEGIN
      6  IF ORA_DICT_OBJ_TYPE = 'TABLE' THEN
      7  SELECT ORA_DICT_OBJ_NAME INTO TABLE_NAME FROM DUAL;
      8  EXECUTE IMMEDIATE
      9  ('CREATE OR REPLACE TRIGGER ID_TABLE_GEN
     10    BEFORE INSERT ON TEST.' || TABLE_NAME ||
     11    ' FOR EACH ROW
     12     BEGIN
     13      SELECT TEST.AE_IDSEQ.NEXTVAL
     14       INTO :new.ID
     15       FROM dual;
     16     END;');
     17  END IF;
     18  END;
     19  /
    
    Trigger created.
    
    SQL> connect test/test
    Connected.
    SQL> create table mytab(id number primary key, a varchar2(1));
    
    Table created.
    
    SQL> insert into mytab (a) values ('a');
    
    1 row created.
    
    SQL> select * From mytab;
    
            ID A
    ---------- -
             1 a
    
    
    SQL> select * from v$version;
    
    BANNER
    ----------------------------------------------------------------
    Oracle Database 10g Enterprise Edition Release 10.2.0.4.0 - 64bi
    PL/SQL Release 10.2.0.4.0 - Production
    CORE    10.2.0.4.0      Production
    TNS for Linux: Version 10.2.0.4.0 - Production
    NLSRTL Version 10.2.0.4.0 - Production
    

    p.s.する必要はありません

    SELECT ORA_DICT_OBJ_NAME INTO TABLE_NAME FROM DUAL;
    

    コマンドに貼り付けるだけです。

    CREATE OR REPLACE TRIGGER ID_TABLE_GEN
      BEFORE INSERT ON APPROOT.' || ORA_DICT_OBJ_NAME ||
    



    1. ドロップダウンリストとして結果を表示するphpmysql

    2. SQL構文またはデータベースの制限?

    3. チェック制約でのcaseステートメントの使用

    4. OracleJDBCユーロ文字