2017-10-16 5 views
1

この関数を機能させることは可能ですか?私はIf文の中にPostgres関数でクエリを挿入します。Postgres if文内に関数の値を挿入する

どのような方法がありますか?

CREATE FUNCTION proc_api_consumer_audit_insert() 
    RETURNS TRIGGER AS $api_consumer$ 
    BEGIN 
     INSERT INTO api_consumer_audit(api_consumer_id, change_type, changed_by, changed_date, business_id_old, business_id_new, name_old, name_new, api_callback_url_old, api_callback_url_new, application_base_url_old, application_base_url_new, authorization_callback_url_old, authorization_callback_url_new, status_old, status_new) 
     VALUES(NEW.id, 'INSERT', (IF NEW.created_by=null THEN CURRENT_USER ELSE NEW.created_by END IF;), CURRENT_TIMESTAMP, null, NEW.business_id, null, NEW.name, null, NEW.api_callback_url, null, NEW.application_base_url, null, NEW.authorization_callback_url, null, NEW.status); 
     RETURN NEW; 
    END; 
    $api_consumer$ LANGUAGE plpgsql; 

答えて

2

SQLにはIFはありません。一般的なものではCASE表現を使用することになりますが、あなたのケースでcoalesce()ははるかに短いです:

INSERT INTO api_consumer_audit(...) 
VALUES (NEW.id, 
     'INSERT', 
     coalesce(new.created_by, current_user), 
     ...); 

CASE式と同じで、次のようになります。私は、SQLのINSERTクエリを呼び出すいた場合

INSERT INTO api_consumer_audit(...) 
VALUES (NEW.id, 
     'INSERT', 
     case 
      when new.created_by IS NOT NULL then new.created_by 
      else current_user 
     end, 
     ...); 
+0

、合体'INSERT INTO api_consumer(business_id、タイプ、ステータス、説明、created_by、created_date、modified_by、modified_date、name、origin_country、license_authority_name、registration_date、api_callback_url、application_base_url、authorization_callback_url、address、local_address、license) VALUES( '101' 、 'PSD2'、 'NEW'、 'TRIGGER ON INのテスト偽のユーザーを表示しています – xross

+0

ケースが機能しています!ありがとうございました! – xross

+0

@xross最初のコメント –

関連する問題