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

Oracleビューから基になるプライマリ(または一意の)キー列を検出する方法

    その情報は、user_dependenciesビューで見つけることができます:

    SQL> CREATE TABLE t_a
      2  (   id number(7)
      3  ,   primary key(id)
      4  )
      5  /
    
    Table created.
    
    SQL> CREATE VIEW v_a AS SELECT * FROM t_a
      2  /
    
    View created.
    
    SQL> select c.constraint_name
      2    from user_dependencies d
      3       , all_constraints c
      4   where d.name = 'V_A'
      5     and d.referenced_type = 'TABLE'
      6     and d.referenced_link_name is null
      7     and d.referenced_owner = c.owner
      8     and d.referenced_name = c.table_name
      9     and c.constraint_type = 'P'
     10  /
    
    CONSTRAINT_NAME
    ------------------------------
    SYS_C0051559
    
    1 row selected.
    

    よろしくお願いいたします。
    ロブ。

    編集 :可能なビュー列名については、このクエリを使用できます。そのような列がビューに存在するという保証はないことに注意してください。

    SQL> select c.constraint_name
      2       , 'V_' || substr(c.table_name,3) || '.' || cc.column_name possible_view_column
      3    from user_dependencies d
      4       , all_constraints c
      5       , all_cons_columns cc
      6   where d.name = 'V_A'
      7     and d.referenced_type = 'TABLE'
      8     and d.referenced_link_name is null
      9     and d.referenced_owner = c.owner
     10     and d.referenced_name = c.table_name
     11     and c.constraint_type = 'P'
     12     and c.owner = cc.owner
     13     and c.constraint_name = cc.constraint_name
     14  /
    
    CONSTRAINT_NAME                POSSIBLE_VIEW_COLUMN
    ------------------------------ -------------------------------------------------------------
    SYS_C0051561                   V_A.ID
    
    1 row selected.
    


    1. SQLインジェクションを防ぐためにmysql_real_escape_stringをどこで使用しますか?

    2. mysqlエラー2005-不明なMySQLサーバーホスト'localhost'(11001)

    3. mysql同じテーブルの2つの行の違いを見つけて、一致しないレコードを一覧表示する方法は? mysqlがテーブル内の一致しない行を検索

    4. チェックボックスでデータベースから複数の行を削除する