Код: Выделить всё
PROCEDURE process_command (IN p_command character varying, OUT numeric)
Error [42703]: ERROR: attribute "log_id" does not exist in Python object
Подсказка: To return null in a column, let the returned object have an attribute named after column with value None.
В документации приводится пример процедуры, в которую включен "return", хотя, казалось бы, должно быть достаточно простого присваивания OUT-параметра.
Но если не делать return, то случается ошибка SQL Error [XX000]: ERROR: procedure returned null record.
Отсюда вопрос:
Как написать процедуру (именно процедуру!) на PLPYTHON с OUT-параметром?
Вот тестовый пример (с return):
Код: Выделить всё
CREATE OR REPLACE PROCEDURE job.test_out_param (param1 varchar, OUT Log_Id numeric)
LANGUAGE plpython3u
AS $procedure$
import os, stat
import datetime
from random import randint
log_id = 2024
plpy.notice('log_id = ' , hint="", detail='detail')
return(log_id)
$procedure$
;
Подсказка: To return null in a column, let the returned object have an attribute named after column with value None.
Где: PL/Python procedure "test_out_param"
SQL statement "CALL job.test_out_param('param1_value', res)"
PL/pgSQL function inline_code_block line 1 at CALL
Если команду return закомментировать, (но оставить присвоение), то ошибка будет такая:
SQL Error [XX000]: ERROR: procedure returned null record
Где: SQL statement "CALL job.test_out_param('param1_value', res)"
Вот текст вызова:
Заранее благодарю ответивших.