我正在使用postgresql,我想知道如何在函数中将参数作为表发送。
我已经创建了type_detalle_ac类型:
CREATE TYPE public.type_detalle_ac AS
(
id_componente integer,
precio numeric(10,2),
cantidad integer,
sub_total numeric(10,2)
);
我在以下函数中使用它:
CREATE OR REPLACE FUNCTION public.sp_adm_artefacto(
v_serie character varying DEFAULT NULL::character varying,
v_tipo_artefacto integer DEFAULT NULL::integer,
v_modelo character varying DEFAULT NULL::character varying,
v_marca integer DEFAULT NULL::integer,
v_detalle type_detalle_ac DEFAULT NULL::type_detalle_ac,
v_usuario integer DEFAULT NULL::integer,
v_id_artefacto integer DEFAULT NULL::integer,
v_tipo_operacion character DEFAULT NULL::bpchar)
RETURNS void
LANGUAGE 'plpgsql'
COST 100
VOLATILE
ROWS 0
AS $BODY$
DECLARE
VL_ID_ARTEFACTO INTEGER;
BEGIN
IF V_TIPO_OPERACION = 'I' THEN
INSERT INTO DETALLE_AC(ID_DETALLE_AC,ID_ARTEFACTO,ID_COMPONENTE,PRECIO,CANTIDAD,SUB_TOTAL,
USUARIO_CREACION,FECHA_CREACION)
SELECT 1,1,ID_COMPONENTE,PRECIO,CANTIDAD,SUB_TOTAL,v_usuario,NOW() FROM V_DETALLE;
END IF;
END;
$BODY$;
但是在调用函数时:
SELECT "sp_adm_artefacto"('1321321',1,'F-14',1,(1,10,5,50),1,NULL,'I')
我收到一个错误:
ERROR: no existe la relación «v_detalle»
LINE 3: ...NTE,PRECIO,CANTIDAD,SUB_TOTAL,v_usuario,NOW() FROM V_DETALLE
谢谢
FROM
条款中有五个数据源:
select * from (values(1,'a'),(2,'b')) as t(x,y);
)对于你的问题:Laurenz already answered about values
way
另一种方式,更短,更一般,但可能更慢一点:
select * from (select variable.*) as t;
它将您的变量转换为类似于表的子查询。
v_detalle
不是表,因此您不能在查询的FROM
子句中使用它。
你应该写
INSERT INTO detalle_ac (...)
VALUES (1, 1, v_detalle.id_componente, v_detalle.precio, ...);