Ich erhalte einen Fehler in meiner benutzerdefinierten Funktion, und in einem Ausmaß verstehe ich den Fehler (nicht erkannte Spalte), aber nicht, warum es verursacht wird. Hier ist der minimale Code, den Fehler zu reproduzieren:Postgresql erkennt Variablennamen nicht in WITH-Klausel eingeführt
create table foo (id serial primary key, name varchar not null);
create table bar (id serial primary key, name varchar not null);
create function foo_to_bar(foo_id int) returns void as $$
begin
with _name as (
select name from foo where id = foo_id
)
insert into bar (name) values (_name);
-- error here: ~~~~~
end;
$$ language plpgsql;
insert into foo (name) values ('slimshady');
-- id of first entry will be 1
select foo_to_bar(1);
Fehler:
ERROR: column "_name" does not exist
LINE 4: insert into bar (name) values (_name)
^
HINT: Perhaps you meant to reference the column "bar.name".
QUERY: with _name as (
select name from foo where id = foo_id
)
insert into bar (name) values (_name)
Warum es völlig ignoriert die _name
, die ich in den geschaffenen with
Klausel, drei Zeilen oben, wo der Fehler ausgelöst wird ? Wie behebe ich das?
Ah aussehen sollte, sehe ich. Danke für die schnelle Antwort! –
Wenn ich andere Funktionsargumente hätte, die in 'bar' eingefügt werden müssen, wie würde ich sie zur' insert'-Anweisung hinzufügen? –
Verstanden! 'Einfügen in bar (name, otherfield) wähle name, _otherfield von _name', wobei _otherfield ein zusätzliches Argument für die Funktion ist –