2016-07-24 8 views
0

Ich möchte eine Postgres-Funktion von Haskell ausführen, die 3 Zeilen aktualisiert, aber mit RETURNS VOID deklariert ist. Ich betreibe die Funktion wie folgt:PostgreSQL-simple `execute` auf eine Funktion scheitert mit" execute results in Col 1-column result "

catch (do execute conn "select record(?,?)" [id1, id2]) 
     (\(e :: SomeException) -> do putStrLn ("Exception:" ++ (show e)); return False) 

aber dies führt zu:

QueryError {qeMessage = "execute resulted in Col 1-column result", qeQuery = "select record(?,?)"} 

Die Abfrage nicht zurück Ergebnisse:

ebdb=> select record('',''); 
record 
-------------------- 

(1 row) 

Wie kann ich diese Funktion Postgresql von Haskell ausführen ?

Antwort

1

Ich würde versuchen, query statt execute mit:

query conn "select 1 from record(?,?)" [id1, id2] 

execute ist für Aussagen wie INSERT, UPDATE, etc Auch wenn Ihre Anweisung keine Zeilen zurückgibt, ist es immer noch eine SELECT, also denke ich, dass Sie query verwenden müssen, um es auszuführen.

1

Diese knifflige Abfrage gibt keine Zeilen, noch die Funktion ausgeführt wird:

select 1 where record('', '') isnull; 
+0

Gleicher Fehler. Ich bin jetzt mit der Umwandlung in eine Abfrage gegangen. Vielen Dank. –