2017-10-16 24 views
1

Est-il possible de faire fonctionner cette fonction? J'ai l'instruction If dans la requête Insert In dans la fonction Postgres.Postgres if instruction à l'intérieur de la fonction insertion de valeurs

Quelles méthodes avez-vous?

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; 

Répondre

2

Il n'y a pas de IF dans SQL. En général, on utiliserait une expression CASE mais dans votre cas coalesce() est beaucoup plus courte:

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

La même chose avec une expression CASE ressemblerait à ceci:

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

Lorsque j'invoque requête d'insertion sql, s'unir ne fonctionne pas: 'INSERT INTO api_consumer (id_affaires, type, statut, description, created_by, created_date, modified_by, modified_date, nom, origin_country, license_authority_name, date_enregistrement, api_callback_url, application_base_url, authorization_callback_url, adresse, adresse_local, licence) VALEURS ('101' , 'PSD2', 'NEW', 'TEST DE DÉCLENCHEUR EN SERT ',' kk ', CURRENT_TIMESTAMP,' gg ', null,' SPRAWDZAM_COS ',' PL ', null, null, null, null, null, 1, 1, 1); '- il montre toujours l'utilisateur inexact – xross

+0

l'affaire fonctionne! Je vous remercie! – xross

+0

@xross Il n'y a pas de 'coalesce()' dans le code que vous avez ajouté dans le premier commentaire –