2016-07-25 11 views
0

ich einen Tisch haben newb, die etwa wie folgt aussieht:Postgresql: Setzen Sie die Variable gleich einem bestimmten Eintrag in einem Array

tablename | columnname 
----------------------- 
walls  | id 
floors | rowid 

Zuerst erstelle ich ein Array:

CREATE TABLE finalsb 
(
    tabnam newb ARRAY 
); 

Dann habe ich Daten legen aus einer Tabelle in das Array:

INSERT INTO finalsb VALUES(ARRAY(SELECT newb FROM newb)); 

die folgende Anweisung zeigt 'id' von Tabelle newb:

SELECT tabnam[1].columnname FROM finalsb; 

Ich möchte wie etwas tun:

Declare colvar varchar,tabvar varchar 
colvar = Select tabnam[1].columnname from finalsb; 
tabvar = Select tabnam[1].tablename from finalsb; 

Mein Hauptziel ist es zu nutzen:

SELECT * FROM tabvar WHERE colvar = "somevalue"; 

jemand kann mir sagen, wie ich das erklären kann SELECT Aussage als Variable?

+0

Sie können nicht SELECT ... FROM' eine 'VARCHAR' Variable (' tabvar'). Was versuchst du hier zu machen? Deine Frage ist nicht klar. – Nicarus

+0

Ich möchte eine Variable zu jedem Wert innerhalb des sleekt tabname [.... Befehl zuweisen. @ Nicarus – nk1995coder

Antwort

0

Sie haben select ... into variable Konstrukt verwenden:

do $$ 
declare 
    colvar varchar; 
    tabvar varchar; 
begin 
    select tabnam[1].columnname into colvar from finalsb; 
    select tabnam[1].tablename into tabvar from finalsb; 
    raise notice 'tabvar: %, colvar: %', tabvar, colvar; 
end 
$$; 

dynamische SQL plpgsql die auszuführen execute benötigt wird:

execute format('SELECT * FROM %s WHERE %s = "somevalue"', quote_ident(tabvar), quote_ident(colvar)); 

zum Beispiel in Form von Funktionen return-Anweisung:

return query execute format('SELECT * FROM %s WHERE %s = "somevalue"', quote_ident(tabvar), quote_ident(colvar)); 

Empfohlener Wert:

https://www.postgresql.org/docs/current/static/plpgsql-statements.html#PLPGSQL-STATEMENTS-SQL-

https://www.postgresql.org/docs/current/static/plpgsql-statements.html#PLPGSQL-STATEMENTS-EXECUTING-DYN

dynamic sql query in postgres

+0

Vielen Dank! Das ist was ich brauchte !! – nk1995coder

+0

Ich versuche, Befehl auszuführen: Wählen Sie * aus Tabvar wo Colvar = 2786683; Im Grunde möchte ich die Form Select * aus Tabellenname verwenden, wo Spaltenname = 2786683. Das Problem ist, ich bekomme Fehler Relation "Tabvar" ist nicht vorhanden. – nk1995coder

+0

Antwort bearbeitet: Werfen Sie einen Blick. –