Re: Why does the PL/pgSQL compiler do this?
От | Michael Moore |
---|---|
Тема | Re: Why does the PL/pgSQL compiler do this? |
Дата | |
Msg-id | CACpWLjMz+wvWLFQnaiA6pamqG2YJuahSWRhf-ov+Dfd7uXf8pw@mail.gmail.com обсуждение исходный текст |
Ответ на | Re: Why does the PL/pgSQL compiler do this? (Michael Moore <michaeljmoore@gmail.com>) |
Ответы |
Re: Why does the PL/pgSQL compiler do this?
Re: Why does the PL/pgSQL compiler do this? |
Список | pgsql-sql |
I'm still a bit confused. If I replace the ROLLBACK; command with ELEPHANT; the result is a syntax error. Why doesn't ROLLBACK; produce the same error since it is not valid in the LANGUAGE plpgsql. I understand that "ROLLBACK TO SAVEPOINT" IS valid. But it's not the same thing.
On Mon, Oct 31, 2016 at 3:55 PM, Michael Moore <michaeljmoore@gmail.com> wrote:
Cool, thanks David, I'll give it a read.On Mon, Oct 31, 2016 at 3:24 PM, David G. Johnston <david.g.johnston@gmail.com> wrote:Here is the complete function, but all you need to look at is the exception block. (I didn't write this code) :-) I will ask the question after the code.[...]RETURN TRUE;
EXCEPTION WHEN OTHERS THEN
RAISE EXCEPTION '% %', SQLERRM, SQLSTATE;
ROLLBACK;
RETURN FALSE;
END;
$BODY$
LANGUAGE plpgsql VOLATILE
COST 100;
So, here is the question. Why does the compiler not catch:
1) ROLLBACK; is not a valid PL/pgSQL command
Reading section 41.10.2 at the linked page should answer this part.2) ROLLBACK; and RETURN FALSE; can never be reached
Similar to the above - though "static analysis" is yet a step beyond even what the syntax checking skipping covered above would reveal.David J.
В списке pgsql-sql по дате отправления: