我在数据库中有一个名为PRIMARY_CONSTRAINTS的表,例如它具有我要添加的主要约束的表名,约束名和列名。
这是一个SQL oracle数据库。
我已经尝试过类似的操作,但是无法运行
ALTER TABLE TABLE_NAME
ADD CONSTRAINT CONSTRAINT_NAME PRIMARY KEY (COLUMN_NAME)
WHERE TABLE_NAME, CONSTRAINT_NAME, COLUMN_NAME IN
( SELECT TABLE_NAME,
CONSTRAINT_NAME,
COLUMN_NAME
FROM PRIMARY_CONSTRAINTS );
如何引用它,以便可以更改表格? 谢谢
答案 0 :(得分:2)
您可以使用以下动态块来实现相同目的:
BEGIN
FOR Q IN (
SELECT
'ALTER TABLE '
|| TABLE_NAME
|| ' ADD CONSTRAINT '
|| CONSTRAINT_NAME
|| ' PRIMARY KEY ( '
|| COLUMN_NAME
|| ')' QRY
FROM
PRIMARY_CONSTRAINTS
) LOOP
EXECUTE IMMEDIATE Q.QRY;
END LOOP;
END;
/
我已经为您创建了一个小型演示-> db<>fiddle demo
如果单个表有两个条目,则可以使用以下块:
BEGIN
FOR Q IN (
SELECT
'ALTER TABLE '
|| TABLE_NAME
|| ' ADD CONSTRAINT '
|| MAX(CONSTRAINT_NAME)
|| ' PRIMARY KEY ( '
|| LISTAGG(COLUMN_NAME,',') WITHIN GROUP (ORDER BY NULL)
|| ')' QRY
FROM
PRIMARY_CONSTRAINTS
GROUP BY TABLE_NAME
) LOOP
EXECUTE IMMEDIATE Q.QRY;
END LOOP;
END;
/
答案 1 :(得分:0)
关于您对约束的多列的评论,我们可以按照在Alter Table语句中使用的相同方式在PRIMARY_CONSTRAINTS表中设置数据。
例如:假设我们必须使用以下语句创建约束,即在Alter表中添加约束Constraint_Name主键columnA,columnB;
然后,PRIMARY_CONSTRAINTS表中此特定约束的条目的值将为COLUMN_NAME的columnA,columnB。
希望这会有所帮助。
问候 阿卡什(Akash)