2016-11-17 41 views
0

こんにちは私はpostgres SQL用の関数を作成するのに問題があります。postgresSQL関数で複数の更新コマンドを実行する際の問題

説明すると、person_detailsテーブルの主キーはidだけで、person_idは同じperson_detailsテーブル内の別のフィールドです。

EXECUTE delete_accounts(('[email protected]','[email protected]'),(1231342321,1224235343)) 
:それはDISTINCTが何のためにあるのかであるので

アイデアは、関数を呼び出すと、検索されているいくつかの電子メールやIDS(複数の電子メールやID番号など)としてそれを使用するのと同じアカウントからのものです

以下のエラーを配っている:

ERROR:構文エラーまたはその付近「ユーザー」 SQL状態:42601 文字:840

を私はテーブルのユーザーを呼び出す周りのいくつかの問題があると知っていますデータベースがUPDATE 'user'は同じエラーを返します - これは私の問題だとは思わない。この中に他のエラーがあれば謝罪は - 私は、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があるということですreserved keyword(SQLの場合はhereを参照してください)。

実際にオブジェクト名として使用する必要がある場合は、それをキーワードではなく識別子として認識されるように二重引用符("user")にする必要があります。

しかし、このような識別子は避けるのが最善です。

関連する問題