2

私は Stackoverflow に本当に慣れていないため、間違いがあったことをお詫びします。

私はQlikviewに取り組んでいます。2 つの異なるテーブルで同じ名前の列を使用することはできません。Oracleからテーブルをインポートする必要があるたびに、すべての列のエイリアスを作成していました。今、私は大規模なデータベースを扱いたいと思っています。そこで、すべての非制約列を入力として受け取り、テーブル名に列名を追加するプロシージャを作成することにしました。

プライマリ列を返す基本的な知識を備えたSQLクエリを作成しましたが、外部キーになると機能しません(外部キーを持つ列を取得します)

私のクエリは次のとおりです

SELECT C.table_name,
        C.column_name
FROM user_constraints a,
  user_cons_columns b,
  ALL_TAB_COLUMNS C
WHERE a.OWNER          =b.owner
AND a.OWNER            =C.owner
AND C.COLUMN_NAME      !=b.COLUMN_NAME
AND a.CONSTRAINT_NAME  =b.CONSTRAINT_NAME
AND a.table_name       =b.table_name
AND a.table_name       =C.table_name
AND a.constraint_type IN('P','R')
AND a.table_name NOT LIKE 'BIN%'
AND A.TABLE_NAME NOT LIKE 'DEF%'
AND b.table_name NOT LIKE 'BIN%'
AND b.TABLE_NAME NOT LIKE 'DEF%'
AND C.table_name NOT LIKE 'BIN%'
AND C.TABLE_NAME NOT LIKE 'DEF%';

任意の提案をいただければ幸いです

ありがとうございました

4

1 に答える 1

2

これにより、特定の schema_name のすべてのテーブルのすべての列が得られます。これらの列は、主キーまたは外部キーの一部ではありません

SELECT  atc.owner,
    atc.table_name,
    atc.column_name 
FROM
    all_tab_columns atc
WHERE
    NOT EXISTS
    (
        SELECT  acc.owner,
            acc.table_name,
            acc.column_name
        FROM
            all_cons_columns acc
        LEFT
        JOIN    all_constraints ac ON acc.owner = ac.owner AND ac.constraint_name = acc.constraint_name AND ac.constraint_type IN ('P', 'R')
        WHERE
            atc.owner = atc.owner
        AND acc.table_name = atc.table_name
        AND acc.column_name = atc.column_name
    )
AND atc.owner = 'YOUR_SCHEMA_NAME'
ORDER
BY  1, 2
/
于 2015-11-20T12:10:54.780 に答える