我真的需要這個幫助,它適用於我的大學項目,而且我卡住了。PostgreSQL和Libpq - 當需求不滿足時創建打印行的觸發器
最大的想法是在表上創建一個觸發器,如果未滿足值要求,它將向用戶輸出一條消息,並且不允許插入語句繼續。
我已經有一個doSQL(conn,「query」)函數將查詢發送到數據庫並打印任何結果(如果有的話)。任何SELECT,UPDATE或INSERT都可以正常工作,但是,我有多行查詢的問題。
例如這樣的:
doSQL(conn, "CREATE OR REPLACE FUNCTION najnizsza_krajowa() RETURNS trigger AS $$ BEGIN IF NEW.pensja<1500 THEN SELECT 'Pensja poniżej najniższej krajowej'; END IF; RETURN NEW; END; $$ LANGUAGE 'plpgsql' ");
返回一個錯誤說ERROR: syntax error at or near "END"
指示在END IF;
(不是後END)。這之後,我有一個創建觸發器聲明
doSQL(conn, "CREATE TRIGGER pensja_check BEFORE INSERT ON pracownik FOR EACH ROW EXECUTE PROCEDURE najnizsza_krajowa();");
我猜應該工作,但我保持搞亂我的函數的東西它只是說功能缺失。我該做什麼錯誤的功能?
編輯:doSQL功能,如要求:
void doSQL(PGconn *polaczenie, char *komenda){
PGresult *rez;
printf("%s\n", komenda);
rez = PQexec(polaczenie, komenda);
printf("Status: %s\n", PQresStatus(PQresultStatus(rez)));
printf("Komunikaty: %s\n", PQresultErrorMessage(rez));
switch(PQresultStatus(rez)) {
case PGRES_TUPLES_OK:
printTuples(rez);
break;
case PGRES_FATAL_ERROR:
printf("Coś nie tak!");
break;
}
PQclear(rez);
}
對不起,一些波蘭的名字,希望這沒有多大關係。 在此先感謝您的幫助,這對我來說非常重要。
是否有任何理由不能使用psql或PgAdmin來提交您的創建語句? – Kuberchaun
是的,這是我的項目所必需的。我知道,有點愚蠢,但我無能爲力。 – Asunez
當我在PgAdmin中運行你的創建函數時,只刪除起始雙引號和結束雙引號,它創建時沒有錯誤。您需要爲doSQL提供源代碼。 – Kuberchaun