Ich arbeite in PostgreSQL vergangenen Jahren, aber ich hatte keine Ahnung über Array-Konzept und wie Array in PostgreSQL zu behandeln. Ich brauche eine dynamische Abfrage für die Auswahl von Spalten in mehreren Tabellen und das Ergebnis wird im Cursor sein, Spaltennamen sollten sich dynamisch ändern.Umgehen String Array als Parameter und dynamische Abfrage in PostgreSQL
für zB (in mehreren Tabellen insgesamt 30 Spalten wird Wenn Benutzer col1 benötigen, COL5, Col6, col25), so select-Anweisung Abfrage dynamisch werden wird sich ändern, wie:
select col1, col5,col6,col25 from table ....
ein anderer Benutzer benötigen col2 , COL5, COL7, col29, col26 wird SELECT-Anweisung dynamisch als
select col2,col5,col7,col29,col26 from table .... and so on.
gespeicherten Prozedur übergeben Parameter Array wird
create or replace function func_my_method(check_in character varying, sel character varying[])...
ändern
dieser sel [] enthält wie
sel[0]:='col1_name'
sel[1]:='col5_name'
sel[2]:='col6_name'
sel[3]:='col25_name'
so müssen wir zuerst aufgespalten werden die Array-Werte in separaten Variable und diese Variable in select-Anweisung angenommen werden wollen
'select'||col1, col5,col6,col25||'from......'
schließlich sagen, Kurz muss ich ein Array in Parametern übergeben und muss eine Array-Werte trennen und es wird separate Variablen zuweisen. Diese Variable wird verwendet, um eine Anweisung dynamisch auszuwählen
so erstellen Sie Ihre dynamische Anweisung. was machst du damit? .. zurück was? Satz von? Tabelle? Anzahl der Reihen? –
@VaoTsun ich erstelle keine Aussage oder Verfahren für diese ich erwähnte nur zu Ihrer Referenz. Ich benötige eine Prozedur für dieses obige Kriterium und werde als Cursor zurückkehren. Bitte hilf mir diesbezüglich. –
Also, Sie brauchen etwas wie ein ['Refcursor'] (https://www.postgresql.org/docs/current/static/plpgsql-cursors.html)? http://rexttester.com/FMCUW60860 - Vergessen Sie bitte nicht, Spaltennamen mit 'format()' oder 'quote_ident()' anzugeben, um die Möglichkeit der SQL-Injektion zu minimieren. – pozs