2016-07-07 1 views
1
CREATE OR REPLACE FUNCTION udf_get_emp_name(p_empcode integer) 
returns text 
AS 
$BODY$ 

    DECLARE l_emp_name TEXT; 
    select emp_name into l_emp_name from employee where empcode = p_empcode; 

    return l_emp_name; 
END; 

$BODY$ 
    LANGUAGE plpgsql VOLATILE 
    COST 100; 

Эта функция создается успешно, и postgresql не проверяет существование таблицы или столбца. Есть ли возможность проверить, правильны ли имена столбцов и таблиц и существуют ли они во время CREATE или REPLACE FUNCTIONPostgresql -CREATE FUNCTION

ответ

3

Для этого вам не нужен PL/pgSQL. Если вы сделаете что обычная sql функции, Postgres будет проверить наличие таблицы и синтаксис вложенных операторов SQL:

CREATE OR REPLACE FUNCTION udf_get_emp_name(p_empcode integer) 
returns text 
AS 
$BODY$ 
    select emp_name 
    from employee 
    where empcode = p_empcode; 
$BODY$ 
    LANGUAGE sql VOLATILE 
    COST 100; 

Если же вы упростили свой пример, и вам действительно нужно PL/PgSQL, то вы можете использовать расширение PL/pgSQL Check (или PL/pgSQL Lint), чтобы проверить код SQL в функциях PL/pgSQL.

+0

Спасибо за ответ. Но если я использую sql, то я не могу вернуть запрос. –

+0

@SayeekrishnanSubramaniam: функция SQL _can_ возвращает результат запроса (как показано в примере в моем ответе) –