Przekazywanie zmiennych do wykonania poprzez polecenie EXECUTE

0

Witam. Starszy stażem kolega twierdzi, że trzeba pisać funkcje tak żeby działały na wypadek gdy zmieni się liczba kolumn w tabeli. Tak więc select i insert mają wyglądać mniej więcej tak:

do $$
declare
nazwy_kolumn text;
res integer;
begin

nazwy_kolumn = 'ciag_nazw_kolumn'; -- oczywiscie nie jest to wpisane na sztywno, tylko pobrane poprzez jakies funkcje

	EXECUTE $Q$
	  WITH
		  ag as (select * from $1),
		  eg as (insert into jakas_tabela ($1) values ('ciag_wartosci_dla_kolumn_po_przecinku')) -- wartosc rzecz jasna rowniez pobrana poprzez zapytanie
	  SELECT count(*) FROM ag
	  $Q$
	  INTO Res
	  USING nazwy_kolumn;

end; $$

Po odpaleniu tego pojawi mi się błąd:

BŁĄD:  błąd składni w lub blisko "$1"
SQL state: 42601

Na początku myślałem, że może sam sposób pisania wyrażenia jest poprawny tylko gdzieś jest rzeczywiście błąd składni, ale próbowałem już uprościć takie zapytanie, tak żeby przekazywać tylko jedną wartość dla jednej kolumny i dostawałem ten sam błąd. Mniemam więc, że pewnie samo przekazanie parametrów nie może się odbyć w ten sposób. Ktoś wie może jak to naprawić?

2

Najpierw używasz $1 jako nazwę tabeli (dla ag), następnie używasz $1 jako listę kolumn (dla eg). To nie może zadziałać w taki sposób.

1
TomRZ napisał(a):

Najpierw używasz $1 jako nazwę tabeli (dla ag), następnie używasz $1 jako listę kolumn (dla eg). To nie może zadziałać w taki sposób.

To też, ale wygląda na to, że stosując dolary i using można przekazywać tylko wartości, a nie można przekazywać definicji kolumn. Jeszcze napiszę o tym jak skończę to, co mam w robocie do skończenia. Tak więc póki co, będę próbował ogarnąć to przekazując wartości przez funkcję format.

1

Może koledze z większym stażem chodziło po prostu o użycie %ROWTYPE?

1 użytkowników online, w tym zalogowanych: 0, gości: 1