2016-05-13 10 views
0

Ich habe ein Problem, bei dem Betreiber nicht existiert, integer = integer[] error kommt, wenn ich versuche, die AbfrageOperator existiert nicht: integer = integer [] plpgsql Fehler

select staff 
from affiliations 
where orgUnit = any (select unnest(*) from get_ou(661)); 

Die Funktion auszuführen get_ou(661) einen Array zurückgibt von ganze Zahlen. Ich wunderte mich, warum ich die = any nicht verwenden kann, um die Mitarbeiter aus einer der Organisationseinheiten aus dem Array zu erhalten.

Vielen Dank für Ihre Hilfe!

Antwort

1

Das ANY Prädikat, das mit subselect verwendet wird, stellt sicher, dass der Wert mit einem von subselect zurückgegebenen Wert verglichen wird.

 
postgres=# SELECT * FROM foo_table; 
┌────┬───┐ 
│ id │ x │ 
╞════╪═══╡ 
│ 1 │ 9 │ 
│ 2 │ 4 │ 
│ 3 │ 1 │ 
│ 4 │ 3 │ 
│ 5 │ 7 │ 
│ 6 │ 5 │ 
│ 7 │ 3 │ 
│ 8 │ 8 │ 
│ 9 │ 3 │ 
│ 10 │ 8 │ 
└────┴───┘ 
(10 rows) 

CREATE OR REPLACE FUNCTION public.foo(VARIADIC integer[]) 
RETURNS integer[] 
LANGUAGE sql 
AS $function$ SELECT $1 $function$ 

Es ist seltsam, Ihr Beispiel ist kaputt (aber mit Syntaxfehler). Wenn ich das Problem beheben, es funktioniert:

postgres=# SELECT * FROM foo_table 
      WHERE x = ANY(SELECT unnest(v) FROM foo(3,8) g(v)); 
┌────┬───┐ 
│ id │ x │ 
╞════╪═══╡ 
│ 4 │ 3 │ 
│ 7 │ 3 │ 
│ 8 │ 8 │ 
│ 9 │ 3 │ 
│ 10 │ 8 │ 
└────┴───┘ 
(5 rows) 

Sie sollten Syntax ändern und von subselect auf Array-Ausdruck bewegen (diese Lösung sollte für diesen Zweck bevorzugt werden):

postgres=# SELECT * FROM foo_table WHERE x = ANY(foo(3,8)); 
┌────┬───┐ 
│ id │ x │ 
╞════╪═══╡ 
│ 4 │ 3 │ 
│ 7 │ 3 │ 
│ 8 │ 8 │ 
│ 9 │ 3 │ 
│ 10 │ 8 │ 
└────┴───┘ 
(5 rows) 
Verwandte Themen