2016-11-17 83 views
0

您好我無法爲postgres SQL創建函數,我的腳本如下。在postgreSQL函數中執行多個更新命令的問題

只是爲了解釋:person_details表的主鍵只是id,person_id是同一個person_details表中的不同字段。

的想法是要調用的函數,並把它作爲這樣(爲多封電子郵件和ID號),正在搜索的一些電子郵件和IDS是來自同一個帳戶,這樣是DISTINCT是什麼:

EXECUTE delete_accounts(('[email protected]','[email protected]'),(1231342321,1224235343)) 

下面是給了錯誤:

錯誤:語法錯誤或接近「用戶」 SQL狀態:42601 性格:840

我知道周圍有調用表用戶的一些問題數據庫,但更新'用戶'給出了同樣的錯誤 - 我不認爲這是我的問題。道歉,如果有這等錯誤 - 我用的MySQL,這是使用的是Postgres SQL

第一次如果有幫助 - 我在pgadmin3使用該

CREATE OR REPLACE FUNCTION delete_accounts(emailList TEXT, personID BIGINT) 

RETURNS INTEGER AS $$ 

DECLARE 
    personDetailsID BIGINT; 
    userIDlist BIGINT; 
    appID TEXT; 

BEGIN 
    --find all person_details ids using the person_id or email given 
    personDetailsID = (SELECT DISTINCT id FROM person_details WHERE email IN $1 OR person_id IN $2); 

    --set the register_status in the people found in personDetailsID to closed 
    UPDATE person_details AS p 
    SET p.onboarding_status = 'CLOSED' 
     WHERE p.id IN personDetailsID; 

    --Each person set up can have multiple users - find the user ids using the user_person_details linking table 
    userIDlist = (SELECT upd.user_id FROM user_person_details AS upd WHERE upd.person_details_id IN personDetailsID); 

    --update the enabled field for the user to 'f' 
    UPDATE user as u 
    SET u.enabled = 'f' 
     WHERE u.id in userIDlist; 

$$ LANGUAGE plpgsql; 

回答

1

的問題是,user是SQL中的reserved keyword(有關列表,請參閱here)。

如果您確實需要將其用作對象名稱,則必須將其雙引號("user"),以便將其識別爲標識符而不是關鍵字。

但最好避免這樣的標識符。