我試着去下一個功能遷移到PostgreSQL的:遷移PLSQL功能pgplsql(PostgreSQL的9.5)
CREATE OR REPLACE FUNCTION mar.change_const (command text) RETURNS
VOID AS $body$
DECLARE
C_Procedure_Name CONSTANT varchar(30) := 'change_constraints';
V_Step real := 0;
/* command values: ENABLE | DISABLE */
all_constraints CURSOR(stat text) FOR
SELECT *
FROM all_constraints
WHERE status = stat;
cons all_constraints%ROWTYPE;
line varchar(200);
cons_status varchar(10);
BEGIN
RAISE NOTICE 'Start : %, %', C_Procedure_Name, TO_CHAR(clock_timestamp());
V_Step := 1;
IF command IN ('enable', 'ENABLE') THEN
cons_status := 'DISABLED';
ELSE
cons_status := 'ENABLED';
END IF;
V_Step := 2;
FOR cons IN all_constraints(cons_status)
LOOP
V_Step := 2.1;
line := 'alter table ' || cons.table_name || ' ' || command ||
' novalidate constraint ' || CONS.CONSTRAINT_NAME;
V_Step := 2.2;
EXECUTE line;
END LOOP;
我知道,我可以切換ALL_CONSTRAINTS與information_schema.table_constraints但我怎麼可以改變的其他部分代碼?我不能禁用和啓用postgresql中的約束,我不想把它們放在這部分。我讀到,我可以改變檢查約束(哪些是我有的唯一類型的約束)沒有驗證,但我沒有找到谷歌上的任何例子。請幫忙,謝謝。
使用format()函數。這至少可以解決報價問題。 – wildplasser