2017-03-22 13 views
0

Wie bekomme ich eine Zeile in einer Temp-Variable und Verarbeitung/Verwendung seiner Felder ?? Siehe den Anfang Abschnitt, ich muss Kontoinformationen erhalten, einige Berechnungen, wie ich Wert von Account.field1 - Account.Field2 in accountbalance Methode, wie das zu tun? --Dieser ist AussageKann keine vorbereitete Anweisung/Funktion in Postgres

PREPARE get_account (varchar) AS 
SELECT * FROM "Accounts" WHERE "AccountKey" = $1 LIMIT 1; 

-- Try to run directly 
select EXECUTE(get_account("A200")); 


--Created a function and used statement. 
CREATE OR REPLACE FUNCTION accountbalance(VARCHAR) RETURNS REAL AS $$ 
    DECLARE 
    AKey ALIAS FOR $1; 
    balance REAL; 
    account RECORD; 
BEGIN 
    account := EXECUTE(get_account("A200")); 
    --Tried these too 
    --account := EXECUTE get_account('A200');  
    --account := EXECUTE get_account("A200");  
    --I need to get account data here, process, How to get data to a declared variable, how user specific column, May be something like Accounts."Total".. 
    --I tried to run direct query here and get data to account, but no success so tried prepared statement. 
    --I will be doing complex calculations here, trying to return a column for test , not sure is it correct? 
RETURN account.Actual; 
END; 
$$ LANGUAGE plpgsql; 

--Used function in sql 

Select accountbalance('A200'); 

in beiden Fällen Fehler wie diese zu erhalten.

FEHLER: Spalte "A200" existiert nicht LINE 1: EXECUTE wählen (get_account ("A200")); ^

********** Fehler **********

ERROR: Spalte "A200" existiert nicht SQL-Status: 42703 Charakter: 28

+1

doppelte Anführungszeichen werden für Relationen verwendet, keine Werte –

+0

Sie führen keine vorbereitete Anweisung aus, wenn Sie EXECUTE wählen (get_account ("A200")); '- Sie führen Ihre Funktion aus –

+0

Ich habe alle Optionen ausprobiert, wählen EXECUTE (get_account ('A200')), und wählen Sie EXECUTE (get_account (A200)); –

Antwort

0

Warum brauchen Sie es? Jedes eingebettete SQL in PLpgSQL ist eine implizit vorbereitete Anweisung. Explizit vorbereitete Anweisungen werden in PLpgSQL nicht unterstützt. Vielleicht möchten Sie dynamisches SQL verwenden - siehe EXECUTE Anweisung.

1

Sie führen prepared statement nicht aus, wenn Sie AUSFÜHREN wählen (get_account ("A200")); - Sie führen Ihre Funktion aus. Hier ist Beispiel dafür, wie vorbereitete Anweisungen auszuführen:

t=# PREPARE get_account (varchar) AS SELECT * FROM pg_tables where tablename = $1; 
PREPARE 
t=# execute get_account ('pg_statistic'); 
schemaname | tablename | tableowner | tablespace | hasindexes | hasrules | hastriggers 
------------+--------------+------------+------------+------------+----------+------------- 
pg_catalog | pg_statistic | postgres |   | t   | f  | f 
(1 row) 

für Sie vorbereitet Anw es

execute get_account ('a200'); 

In Bezug auf die Verwendung von SQL EXECUTE in plpgsql Block sein würde (was hat seine eigene EXECUTE - sehr verschieden von SQL-one) Bitte lesen Sie https://stackoverflow.com/a/12708117/5315974

+0

Das funktioniert jedoch nicht innerhalb der Funktion accountbalance(), siehe meine Frage account: = EXECUTE get_account ('A200'); –

+0

aktualisiert mit Details –

Verwandte Themen