Ich versuche, eine PL/pgSQL-Funktion mit einem VARCHAR-Argument zu schreiben, das begrenzt werden sollte. Betrachten Sie folgende Funktion, mit einem VARCHAR-Parameter auf eine Größe von 5 Zeichen begrenzt:PL/pgSQL-Funktion mit VARCHAR als Parameter
CREATE OR REPLACE FUNCTION do_nothin(v_value VARCHAR(5))
RETURNS TEXT AS
$$
DECLARE
BEGIN
RETURN v_value;
END;
$$
LANGUAGE plpgsql;
Wenn ich diese Funktion mit einem Text nennen größer als 5 ist, funktioniert es:
DO $$
DECLARE
BEGIN
PERFORM do_nothin('123456');
END;
$$
Es gibt mir die Ergebnis '123456', aber warum? Das sollte mir einen Fehler geben, oder?
Wenn ich definieren eine varchar wie folgt aus:
DO $$
DECLARE
v_mytext VARCHAR(5);
BEGIN
v_mytext := '123456';
END;
$$
es mir einen Fehler gibt, wie erwartet:
ERROR: value too long for type character varying(5) CONTEXT: PL/pgSQL function inline_code_block line 5 at assignment SQL state: 22001
ich diesen Fehler wollen geworfen, wenn ein zu großes Argument für die Funktion ist, aber wie?