您的位置:首页 > 产品设计 > UI/UE

PLSQL Tools for query primary key and foreign key of a table

2017-02-03 16:33 549 查看
SET VERIFY OFF
SET SERVEROUTPUT ON
DECLARE
V_TABLE_NAME VARCHAR2(100);  -- 表名
V_PK_NAME    VARCHAR2(100);  -- 主キー制約の名前
V_COLUMNS    VARCHAR2(3000); -- 列名の取得(列1,列2,・・)
BEGIN
-- 表名の取得(キーボードから入力)
V_TABLE_NAME := UPPER('&TABLE_NAME');
-- 主キー制約の名前の取得
SELECT
CONSTRAINT_NAME
INTO
V_PK_NAME
FROM
USER_CONSTRAINTS
WHERE
TABLE_NAME        = V_TABLE_NAME
AND CONSTRAINT_TYPE = 'P';
-- 取得した主キーの列名(複合例)の取得
FOR REC IN
(
SELECT
COLUMN_NAME
FROM
USER_CONS_COLUMNS
WHERE
CONSTRAINT_NAME = V_PK_NAME
ORDER BY
POSITION
)
LOOP
-- "列名," を後ろに追記する
V_COLUMNS := V_COLUMNS || REC.COLUMN_NAME || ',';
END LOOP;
-- 最後の余分な','をとっている
V_COLUMNS := SUBSTR(V_COLUMNS,1,LENGTH(V_COLUMNS)-1);
--  "列名,列名"の前後をかっこ()で囲む
V_COLUMNS := '(' || V_COLUMNS || ')';
DBMS_OUTPUT.PUT_LINE('Table Name:' || V_TABLE_NAME || '  Primary Key :' || V_COLUMNS);
-- この表を参照する子表の外部キー制約名を取得し、
-- 子表の名前と外部キー列を表示する
FOR REC1 IN
(
SELECT
CONSTRAINT_NAME,
TABLE_NAME
FROM
USER_CONSTRAINTS
WHERE
R_CONSTRAINT_NAME = V_PK_NAME
AND CONSTRAINT_TYPE = 'R'
)
LOOP
-- さらに外部キー制約名から、列名(複合列)を変数に取得する
V_COLUMNS := NULL;
FOR REC2 IN
(
SELECT
COLUMN_NAME
FROM
USER_CONS_COLUMNS
WHERE
CONSTRAINT_NAME = REC1.CONSTRAINT_NAME
ORDER BY
POSITION
)
LOOP
V_COLUMNS := V_COLUMNS || REC2.COLUMN_NAME || ',';
END LOOP;
V_COLUMNS := SUBSTR(V_COLUMNS,1,LENGTH(V_COLUMNS)-1);
V_COLUMNS := '(' || V_COLUMNS || ')';
-- 子表の情報を画面表示
DBMS_OUTPUT.PUT_LINE('Child Table Name:' || REC1.TABLE_NAME || '  Foreign Key :' || V_COLUMNS);
END LOOP;
END;
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐