2017-10-16 1 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이 없습니다.

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

과 같을 것이다 CASE 표현식과 같은 :

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

내가 SQL 삽입 쿼리를 호출하고, 유착 CASE 표현하지만 귀하의 경우 coalesce()에를 사용하는 것이 일반적으로 하나 더 짧은 ('101') : 'INSERT INTO api_consumer (business_id, 유형, 상태, 설명, 생성 _by, 만든 날짜, 수정 _by, 수정 _ 날짜, 이름, origin_country, license_authority_name, registration_date, api_callback_url, application_base_url, authorization_callback_url, address, local_address, license) VALUES , 'PSD2', 'NEW', 'TRIGGER ON IN 테스트 null, null, null, null, null, 1, 1, 1); - 여전히 잘못된 사용자를 표시 함 – xross

+0

케이스가 작동 중! 고맙습니다! – xross

+0

@xross 첫번째 코멘트에 추가 한 코드에는'coalesce()'가 없습니다. –