Включить опции SET в функцию - PullRequest
0 голосов
/ 17 января 2020

У меня есть функция, которая создает несколько временных таблиц и JOINS для этих временных таблиц. Когда я CREATE функция I, я могу включить эту строку вверху запроса:

SET check_function_bodies = false;

Это предотвращает ошибку «связь существует» из будучи поднятым. Пока все хорошо, но возможно ли включить одну и ту же строку SET при вызове функции или она должна быть включена в само определение функции?

Вот мое фактическое определение функции:

CREATE OR REPLACE FUNCTION reporting."rsp_TermPositionRawData_WIP"( /* parameters */ ) RETURNS void LANGUAGE 'sql'
COST 100 VOLATILE SET check_function_bodies=false
AS $BODY$
BEGIN
    DROP TABLE IF EXISTS FilteredRequests;
    DROP TABLE IF EXISTS FilteredResponses;
    DROP TABLE IF EXISTS Ranks;    

    CREATE TEMP TABLE FilteredRequests AS
       SELECT /* large query */;
    CREATE TEMP TABLE FilteredResponses AS
       SELECT /* large query that references "filteredrequests" */
    CREATE TEMP TABLE Ranks AS
       SELECT /* large query that references "filteredresponses" */
$BODY$;

Сообщение об ошибке

ERROR: relation "filteredrequests" does not exist LINE 116: INNER JOIN FilteredRequests FRQ ON FRQ.QuoteID

1 Ответ

0 голосов
/ 17 января 2020

Чтобы избежать ошибки во время CREATE FUNCTION, вам нужно SET параметр, как вы это сделали. Невозможно включить это в оператор CREATE FUNCTION.

Предложение SET в CREATE FUNCTION контролирует параметры при выполнении функции, а не при ее определении.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...