@-Soft
24-01-2011, 17:15:29
hola
no soy muy experto con esto de los triggers y quisiera que me echen una manito a ver que estoy haciendo mal.
el propósito de este triggers es que después de insertar el encabezado en la tabla, se rellene una serie de tablas de detalles con valores de unos catálogos predefinidos.
aquí les dejo el código de dicho trigger, estoy trabajando con delphi 7, firebird 2.1 e IBExpert.
el error es Parsing Error!
SET TERM ^ ;
CREATE OR ALTER TRIGGER TGR_INSERTA_DETALLES_INFORME FOR TBL_INFORMES_CAB
ACTIVE BEFORE INSERT POSITION 0
AS
declare variable idregistro idnumerico;
declare variable formulario idtexto;
declare variable idservicio idtexto;
declare variable servicio descripcion_d;
declare variable grupo descripcion_b;
begin
/*Busco el nuevo registro insertado*/
select first 1 new.id_registro, new.id_form
from tbl_informes_cab
into :idregistro, :formulario;
/*FORMULARIO 67A CON CAMAS*/
if (:formulario = '67A') then
begin
/*CONSULTA EXTERNA 67A*/
select CODIGO, SERVICIO, grupo FROM vw_servicio_ce_67a
INTO :idservicio, :servicio, :grupo;
insert into tbl_informes_det_ce (ID_REGISTRO, ID_FORM, CODIGO_SERVICIO, SERVICIO, GRUPO)
values (:idregistro, :formulario, :idservicio, :servicio, :grupo);
/*CONSULTA DATOS VARIOS 67A*/
select CODIGO, SERVICIO, grupo FROM vw_servicio_dv_67a
INTO :idservicio, :servicio, :grupo;
insert into tbl_informes_det_DV (ID_REGISTRO, ID_FORM, CODIGO_SERVICIO, SERVICIO, GRUPO)
values (:idregistro, :formulario, :idservicio, :servicio, :grupo);
/*CONSULTA HOSPITALARIA 67A*/
select CODIGO, SERVICIO, grupo FROM vw_servicio_hosp_67a
INTO :idservicio, :servicio, :grupo;
insert into tbl_informes_det_hosp (ID_REGISTRO, ID_FORM, CODIGO_SERVICIO, SERVICIO, GRUPO)
values (:idregistro, :formulario, :idservicio, :servicio, :grupo);
/*CONSULTA PACIENTES EXTRANJEROS 67A*/
select CODIGO, SERVICIO, grupo FROM vw_servicio_pext_67a
INTO :idservicio, :servicio, :grupo;
insert into tbl_informes_det_pext (ID_REGISTRO, ID_FORM, CODIGO_SERVICIO, SERVICIO, GRUPO)
values (:idregistro, :formulario, :idservicio, :servicio, :grupo);
/*CONSULTA SALUD REPRODUCTIVA 67A*/
select CODIGO, SERVICIO, grupo FROM vw_servicio_srep_67a
INTO :idservicio, :servicio, :grupo;
insert into tbl_informes_det_srep (ID_REGISTRO, ID_FORM, CODIGO_SERVICIO, SERVICIO, GRUPO)
values (:idregistro, :formulario, :idservicio, :servicio, :grupo);
/*CONSULTA REPORTE ADMINISTRATIVO-FINANCIERO 67A*/
select CODIGO, SERVICIO, grupo FROM vw_servicio_rafm_67a
INTO :idservicio, :servicio, :grupo;
insert into tbl_informes_det_rafm (ID_REGISTRO, ID_FORM, CODIGO_SERVICIO, SERVICIO, GRUPO)
values (:idregistro, :formulario, :idservicio, :servicio, :grupo);
end
end
^
SET TERM ; ^
gracias de antemano
no soy muy experto con esto de los triggers y quisiera que me echen una manito a ver que estoy haciendo mal.
el propósito de este triggers es que después de insertar el encabezado en la tabla, se rellene una serie de tablas de detalles con valores de unos catálogos predefinidos.
aquí les dejo el código de dicho trigger, estoy trabajando con delphi 7, firebird 2.1 e IBExpert.
el error es Parsing Error!
SET TERM ^ ;
CREATE OR ALTER TRIGGER TGR_INSERTA_DETALLES_INFORME FOR TBL_INFORMES_CAB
ACTIVE BEFORE INSERT POSITION 0
AS
declare variable idregistro idnumerico;
declare variable formulario idtexto;
declare variable idservicio idtexto;
declare variable servicio descripcion_d;
declare variable grupo descripcion_b;
begin
/*Busco el nuevo registro insertado*/
select first 1 new.id_registro, new.id_form
from tbl_informes_cab
into :idregistro, :formulario;
/*FORMULARIO 67A CON CAMAS*/
if (:formulario = '67A') then
begin
/*CONSULTA EXTERNA 67A*/
select CODIGO, SERVICIO, grupo FROM vw_servicio_ce_67a
INTO :idservicio, :servicio, :grupo;
insert into tbl_informes_det_ce (ID_REGISTRO, ID_FORM, CODIGO_SERVICIO, SERVICIO, GRUPO)
values (:idregistro, :formulario, :idservicio, :servicio, :grupo);
/*CONSULTA DATOS VARIOS 67A*/
select CODIGO, SERVICIO, grupo FROM vw_servicio_dv_67a
INTO :idservicio, :servicio, :grupo;
insert into tbl_informes_det_DV (ID_REGISTRO, ID_FORM, CODIGO_SERVICIO, SERVICIO, GRUPO)
values (:idregistro, :formulario, :idservicio, :servicio, :grupo);
/*CONSULTA HOSPITALARIA 67A*/
select CODIGO, SERVICIO, grupo FROM vw_servicio_hosp_67a
INTO :idservicio, :servicio, :grupo;
insert into tbl_informes_det_hosp (ID_REGISTRO, ID_FORM, CODIGO_SERVICIO, SERVICIO, GRUPO)
values (:idregistro, :formulario, :idservicio, :servicio, :grupo);
/*CONSULTA PACIENTES EXTRANJEROS 67A*/
select CODIGO, SERVICIO, grupo FROM vw_servicio_pext_67a
INTO :idservicio, :servicio, :grupo;
insert into tbl_informes_det_pext (ID_REGISTRO, ID_FORM, CODIGO_SERVICIO, SERVICIO, GRUPO)
values (:idregistro, :formulario, :idservicio, :servicio, :grupo);
/*CONSULTA SALUD REPRODUCTIVA 67A*/
select CODIGO, SERVICIO, grupo FROM vw_servicio_srep_67a
INTO :idservicio, :servicio, :grupo;
insert into tbl_informes_det_srep (ID_REGISTRO, ID_FORM, CODIGO_SERVICIO, SERVICIO, GRUPO)
values (:idregistro, :formulario, :idservicio, :servicio, :grupo);
/*CONSULTA REPORTE ADMINISTRATIVO-FINANCIERO 67A*/
select CODIGO, SERVICIO, grupo FROM vw_servicio_rafm_67a
INTO :idservicio, :servicio, :grupo;
insert into tbl_informes_det_rafm (ID_REGISTRO, ID_FORM, CODIGO_SERVICIO, SERVICIO, GRUPO)
values (:idregistro, :formulario, :idservicio, :servicio, :grupo);
end
end
^
SET TERM ; ^
gracias de antemano