In diesem Skript erwartete ich die Ausgabe zu sein:PostgreSQL Variablennamen als Stringliteral
NOTICE: 00000: Outside value is: hello
NOTICE: 00000: Inside value is: hello
aber der Ausgang war:
NOTICE: 00000: Outside value is: hello
NOTICE: 00000: Inside value is: my_variable
Warum PostgreSQL mit dem Namen der Variablen als String-Literal beim Übergeben an die Funktion? Beachten Sie, dass ich den Variablennamen nicht in Anführungszeichen gesetzt habe, sodass ich nicht erwartet habe, dass er als Zeichenfolgenliteral interpretiert wird. Hier
ist das Skript:
DROP TABLE IF EXISTS my_table;
CREATE TABLE my_table(my_field text);
CREATE OR REPLACE FUNCTION my_function() RETURNS TRIGGER AS $$
BEGIN
RAISE NOTICE 'Inside value is: %', TG_ARGV[0];
RETURN NEW;
END;
$$ LANGUAGE plpgsql;
DO $$
DECLARE
my_variable text := 'hello';
BEGIN
RAISE NOTICE 'Outside value is: %', my_variable;
CREATE TRIGGER my_trigger
AFTER INSERT ON my_table
FOR EACH ROW
EXECUTE PROCEDURE my_function(my_variable);
END
$$;
INSERT INTO my_table VALUES('some value');
Ha! Danke, ich habe auf eine andere Dokumentationsseite geschaut, die das nicht so klar gemacht hat. – MondKin