Finding sequences and triggers associated with an Oracle table

后端 未结 3 963
失恋的感觉
失恋的感觉 2021-01-01 22:02

I have used this query to fetch the list of sequences belonging to an Oracle database user:

SELECT * FROM all_sequences x,all_tables B
WHERE x.sequence_owner         


        
3条回答
  •  旧时难觅i
    2021-01-01 22:33

    One way would be to run these queries to check if there are any sequence's Pseudocolumns (NEXTVAL and CURRVAL ) used in your functions , procedures, packages, Triggers or PL/SQL JAVA SOURCE.

    select * from user_source where 
             UPPER(TEXT) LIKE '%NEXTVAL%';   
    
    select * from all_source where 
             UPPER(TEXT) LIKE '%NEXTVAL%';  
    

    Then go to the specific Procedure, Function or Trigger to check which column/table gets populated by a sequence. The query could also be used with '%CURRVAL%'

    This might not help if you are running inserts from JDBC or other external applications using a sequence.


    Oracle 12c introduced the IDENTITY columns, using which you could create a table with an identity column, which is generated by default.

    CREATE TABLE t1 (c1 NUMBER GENERATED BY DEFAULT ON NULL AS IDENTITY, 
                       c2 VARCHAR2(10));
    

    This will internally create a sequence that auto-generates the value for the table's column.So, If you would like to know which sequence generates the value for which table, you may query the all_tab_columns

    SELECT data_default AS sequence_val
        ,table_name
        ,column_name
    FROM all_tab_columns
    WHERE OWNER = 'HR'
        AND identity_column = 'YES';
    
    SEQUENCE_VAL                             |TABLE_NAME               |COLUMN_NAME
    -----------------------------------------|-------------------------------------
    "HR"."ISEQ$$_78160".nextval              |T1                       |C1
    

提交回复
热议问题