CREATE OR REPLACE PROCEDURE unique_columns (p_schema IN VARCHAR2)
AS
l_cmd VARCHAR2 (200);
l_cnt INTEGER;
BEGIN
FOR eachcol IN ( SELECT *
FROM all_tab_cols
WHERE owner = p_schema
ORDER BY table_name, column_name)
LOOP
l_cmd := 'select count(*) c from (select count(*) c, '
|| eachcol.column_name
|| ' from '
|| eachcol.owner
|| '.'
|| eachcol.table_name
|| ' having count(*) > 1)';
EXECUTE IMMEDIATE l_cmd INTO l_cnt;
IF l_cnt = 0
THEN
DBMS_OUTPUT.put_line (
'Unique: ' || eachcol.owner || '.' || eachcol.table_name || '.' || eachcol.column_name
);
END IF;
END LOOP;
EXCEPTION
WHEN OTHERS
THEN
DBMS_OUTPUT.put_line (l_cmd);
RAISE;
END;
EXEC unique_columns('BRIANL');
Unique: BRIANL.CATS.CATNAME
Unique: BRIANL.CATS.ID
Unique: BRIANL.CATS.USERID
Unique: BRIANL.DELETEME_TABLE.A
Unique: BRIANL.DELETEME_TABLE.B
Unique: BRIANL.DELETEME_TBL.A
Unique: BRIANL.DELETEME_TBL.B
Unique: BRIANL.DELETEME_TBL.C
Unique: BRIANL.DELETME_TBL.DUMMY
Unique: BRIANL.DIR_LIST.FILENAME
スキーマ定義、サンプルデータ、および予想される結果などの詳細情報を提供できますか。このような質問をすることで、多くの助けを得ることはありません。また、これまでに何を試しましたか?あなたの作品を見せてください。 –
おそらく "一意の値を持つ列"を定義する必要があります –
私が試したクエリは以下に示しますが、これは機能しません。私は一意の値を持つテーブルのすべての列が必要です。これらの列に対して一意の制約を作成する必要があります。 –