Вопрос: Как я могу объявить переменную того же типа, что и параметр в хранимой функции?
Простой ответ - использовать %TYPE
, это работает:
CREATE OR REPLACE FUNCTION test_function_1(param1 text)
RETURNS integer AS
$BODY$
DECLARE
myVariable param1%TYPE;
BEGIN
return 1;
END;
$BODY$
LANGUAGE plpgsql VOLATILE
COST 100;
Нопроблема в том, что param1
является составным типом:
CREATE TYPE comp_type as
(
field1 text
)
CREATE OR REPLACE FUNCTION test_function_2(param1 comp_type)
RETURNS integer AS
$BODY$
DECLARE
myVariable param1%TYPE;
BEGIN
return 1;
END;
$BODY$
LANGUAGE plpgsql VOLATILE
COST 100;
Это не работает:
ERROR: type comp_type does not exist [SQL State=42704]
Так как я могу это сделать, когда param1
является составным типом?
(Примечание: просто myVariable comp_type
не очень хороший вариант, потому что моя функция немного более сложная.)
Отредактировано: при копировании и вставке произошла ошибка, настоящая ошибка:
ERROR: invalid type name "param1%TYPE"
Position: 130 [SQL State=42601]
А при использовании param1%ROWTYPE
ошибка:
ERROR: relation "param1" does not exist
Where: compilation of PL/pgSQL function "test_function_2" near line 3 [SQL State=42P01]