Re: SQL state: 42601. Execption handling.
От | Kyotaro Horiguchi |
---|---|
Тема | Re: SQL state: 42601. Execption handling. |
Дата | |
Msg-id | 20220608.101259.2140163957002181619.horikyota.ntt@gmail.com обсуждение исходный текст |
Ответ на | Re: SQL state: 42601. Execption handling. (Tom Lane <tgl@sss.pgh.pa.us>) |
Список | pgsql-general |
At Tue, 07 Jun 2022 10:36:52 -0400, Tom Lane <tgl@sss.pgh.pa.us> wrote in > =?UTF-8?B?0KY=?= <pfunk@mail.ru> writes: > > -- 2 -- > > do $$ > > begin > > select p.result from dbo.func() p into v_result; > > exception when SQLSTATE '42601' then > > raise '42601' ; > > when others then > > raise 'others' ; > > end ; > > $$ > > > > --Exception is not handled. This is the question. > > ERROR: "v_result" is not a known variable > > LINE 3 : select p.result from dbo.func() p into v_result; > > This error is thrown by the plpgsql parser, so you can't trap it > with "exception", any more than you could trap other syntax errors > detected by the parser. (As an extreme example, you could certainly > not trap it if you misspelled "exception".) FWIW, you can see the difference as the following difference. =# CREATE OR REPLACE FUNCTION f1() RETURNS void AS $$ declare v_result int; begin select p.result from dbo.func(d) p into v_result; end ; $$ LANGUAGE plpgsql; CREATE FUNCTION (Succeeds. That is, plpgsql parser doesn't catch it.) =# select f1(); ERROR: column "d" does not exist (Caught by SQL parser executed at runtime) =# CREATE OR REPLACE FUNCTION f2() RETURNS void AS $$ begin select p.result from dbo.func() p into v_result; end ; $$ LANGUAGE plpgsql; ERROR: "v_result" is not a known variable LINE 3: select p.result from dbo.func() p into v_result; (Fails, as plpgsql parser caught it.) regards. -- Kyotaro Horiguchi NTT Open Source Software Center
В списке pgsql-general по дате отправления: