Postgresql
SQL 錯誤428834288342883- 函式不存在 - 無法從觸發器呼叫函式
當表 1 插入一行時,我想在表 2 中插入一個新行。我為此創建了一個函式。但是,當我嘗試創建觸發器時,雖然創建了函式並且我可以看到該函式,但它給出了一個錯誤。
SQL Error [42883]: ERROR: function insertintoautoincrementexample() does not exist
以下是與之相關的詳細資訊。我嘗試使用一些文本參數創建觸發器,但沒有運氣。
//Table 1 CREATE TABLE myOriginalTable( companyName VARCHAR(15) PRIMARY KEY NOT NULL, location VARCHAR(30) ); //Table 2 CREATE TABLE autoincrementexample ( entryid INT4 NOT NULL DEFAULT nextval('autoincrementexample_entryid_seq'::regclass), companyname VARCHAR(15) NOT NULL, location VARCHAR(30) NOT NULL, PRIMARY KEY (companyname) ); //Function CREATE OR REPLACE FUNCTION insertIntoAutoIncrementExample(companyname text,location text) returns void language plpgsql as $function$ declare varaudseq bigint; begin varaudseq :=0; begin SELECT NEXTVAL(autoincrementexample) INTO varaudseq; INSERT INTO autoincrementexample(companyname,location)VALUES(companyName,location); COMMIT; END; END; $function$; //Trigger CREATE TRIGGER after_insert_original AFTER INSERT ON myoriginaltable FOR EACH row EXECUTE PROCEDURE insertintoautoincrementexample();
對此有任何幫助將不勝感激。
正如文件所說:
必須先定義觸發器函式,然後才能創建觸發器本身。觸發器函式必須聲明為不帶參數並返回類型觸發器的函式。(觸發器函式通過特殊傳遞的 TriggerData 結構接收其輸入,而不是以普通函式參數的形式。)
您聲明的功能是:
insertIntoAutoIncrementExample(companyname text,location text) ... returns void
所以它不適合返回類型和參數類型。觸發器函式不接受參數,但可以訪問在行變數中插入或更改的值
NEW
和OLD
. 它們在 plpgsql 中自動定義,有關詳細資訊和範例,請參閱plpgsql 章節中的觸發過程。關於錯誤消息:
function insertintoautoincrementexample() does not exist
這意味著:這個帶有空參數列表的函式名不存在。括號的存在是相關的,因為在 postgresql 中,函式總是與它們的參數類型一起使用: 與, or or
foobar(int)
不同的函式。foobar()``foobar(int,int)``foobar(text)