1

J'utilise les rails 3 et je dois exécuter raw sql dans l'une de mes migrations et je dois le faire en utilisant une instruction préparée car c'est le meilleur moyen d'échapper aux problèmes qui se posent , déclaration ou autre. Y at-il un moyen où je peux exécuter plusieurs instructions sql dans une seule instruction de préparation. J'utilise PostgreSQL pour ma base de donnéesInsérer plusieurs commandes dans des rails de requête préparés

Voici mon code que j'ai essayé

CONN = ActiveRecord::Base.connection.raw_connection 
    sql = %Q[ 
      INSERT INTO table1 
       (
       name, 
       email, 
       phone, 
       created_at, 
       updated_at 
       ) 
       VALUES 
       (
       $1, 
       $2, 
       $3, 
       current_timestamp, 
       current_timestamp 
      ); 
      UPDATE table2 
       SET column_1 = $1 
       WHERE id = $4; 
      UPDATE contacts SET 
       column_2 = $2 
       WHERE id = $4 
      ] 

    CONN.prepare('insert_and_update', sql) 
    CONN.exe_prepared('insert_and_update', [ 
     name, 
     email, 
     phone, 
     customer.id 
    ]) 

Mais je reçois erreur

cannot insert multiple commands into a prepared statement 

Répondre

2

le transformer en une seule commande:

with i as (
    insert into table1 (
     name, 
     email, 
     phone, 
     created_at, 
     updated_at 
    ) values (
     $1, 
     $2, 
     $3, 
     current_timestamp, 
     current_timestamp 
), u as (
    update table2 
    set column_1 = $1 
    where id = $4 
) 
update contacts 
set column_2 = $2 
where id = $4 
; 
+0

Et si je veux quelque chose comme 'set local intervalstyle = postgres_verbose;'? Il ne peut pas aller à CTE. – mlt