PostgreSQL: FEHLER-operator nicht vorhanden ist: || character varying
Ich brauche, um zu überprüfen, die Bedingung innerhalb der Funktion mit string_agg () - Funktion und weisen Sie auf die variable. Nach der Zuweisung, die ich brauchen, um ausführen die variable mit Wert.
Beispiel:
create or replace function funct1(a int,b varchar)
returns void as
$$
declare
wrclause varchar := '';
sqlq varchar ;
t varchar;
begin
IF (b IS NOT NULL ) THEN
wrclause := 'AND b IN ('|| b || ')';
END IF;
sqlq := string_agg('select *, abcd as "D" from ' ||table_namess,' Union all ') as namess
from tablescollection2 ud
inner join INFORMATION_SCHEMA.Tables so on ud.table_namess = so.Table_name
WHERE cola NOT IN (SELECT cola FROM tablet WHERE colb = || a ||) || wrclause; /* Error occurred here at = || a */
raise info '%',sqlq;
execute sqlq into t;
raise info '%',t;
end;
$$
language plpgsql;
Aufrufende Funktion:
select funct1(1,'1,2,3');
Fehler:
ERROR: operator does not exist: || integer
Du musst angemeldet sein, um einen Kommentar abzugeben.
||
ist ein operator für catenating zwei Stücke von text, es erfordert, dass Sie text (oder etwas convertible to text) vor und nach dem operator, etwa so:So, während diese scheinen gültig zu sein:
Ist dies definitiv nicht:
Was versuchten Sie zu erreichen?
Es sieht aus wie Sie versuchen, eine Abfrage zu erstellen, die dynamisch. Sie müssen sich daran zu erinnern, dass Sie nicht mischen kann freier text mit SQL und erwarten, dass Postgres zu Sortieren Sie es aus, die keine Programmierung oder Abfrage der Sprache hat das.
Wenn Ihre Absicht ist, sollten Sie erstellen Sie die Abfrage-string zunächst in seiner Gesamtheit (in einer Variablen), und rufen Sie dann
EXECUTE
mit, damit Sie interpretiert werden.Haben Sie einen Blick auf diese:
Dieses Stück enthält die syntax-Fehler
PostgreSQL kann verstehen, aber werden versuchen, Suche für unäre Präfix (und postfix)
||
Betreiber, die nicht standardmäßig vorhanden ist (Sie kann erstellt werden, aber die Fehlermeldung sagt, dass das nicht der Fall ist)Bearbeiten:
F. ex. diese sind gültig (vordefinierten) unäre Operatoren auf zahlen: