1.我创建了我的数据类型" FechaHistorica"
--1-
create or replace TYPE exper.FechaHistorica as object(
anio integer,
mes integer,
dia integer
);
2-我用我的用户数据类型
创建一个包含2列的表CREATE TABLE exper.Persona(
persona varchar(20) not null,
nombre varchar(200) not null,
sexo varchar(1) not null,
fNacimiento ref FechaHistorica,
fMuerte ref FechaHistorica,
generales nclob,
constraint pkPersona primary key( persona ),
constraint chkSexo check( sexo = 'M' or sexo = 'm' or sexo = 'F' or sexo = 'f' )
);
3-在这个功能中,我尝试做的是通过Fnacimiento或FMuerte。在此函数中,如果comprobations将值标记为正确,则将值返回为0.
--2-
create or replace function Validar(objeto in FechaHistorica)
return integer is
some_variable integer;
vBandera boolean;
begin
if(objeto.anio = null and objeto.mes=null and objeto.dia=null ) then
some_variable:=0;
elsif(objeto.anio = null and objeto.mes<>null and objeto.dia<>null) then
some_variable:=1;
elsif(objeto.mes = null and objeto.dia<>null) then
some_variable:=1;
elsif(objeto.anio<>null and objeto.mes<>null and objeto.dia = null) then
some_variable:=0;
end if;
--Comprabar mes y día.
if(some_variable = 0) then
if((objeto.mes>12) or (objeto.mes <1)) then
some_variable:=1;
elsif((objeto.mes = 02) or (objeto.mes = 2)) then
If objeto.anio Mod 4 = 0 Then
If (objeto.anio Mod 100 = 0) And Not (objeto.anio Mod 400 = 0) Then
vBandera := False;
if(objeto.dia>28) then
some_variable:=1;
END IF;
Else
vBandera := True;
if(objeto.dia>29) then
some_variable:=1;
END IF;
End If;
Else
vBandera := False;
End If;
End if;
End if;
return some_variable;
end;
4-在这个触发器中我想调用该函数,但是在调用函数时我得到错误的错误数量或类型的参数。我该怎么做才能纠正这个问题?
--3-
CREATE OR REPLACE TRIGGER exper.some_trigger
before insert or update on exper.Persona for each row
BEGIN
if Validar(:New.fNacimiento) = 0
then
DBMS_OUTPUT.PUT_LINE('Fecha de Nacimiento Aceptada');
Else
raise_application_error(-20001, 'Fecha de Nacimiento no aceptada');
END IF;
if Validar(:New.fMuerte) = 0
then
DBMS_OUTPUT.PUT_LINE('Fecha de Muerte Aceptada');
Else
raise_application_error(-20002, 'Fecha de Muerte no aceptada');
END IF;
END some_trigger;
答案 0 :(得分:0)
删除表定义中的“REF”。
CREATE TABLE Persona(
persona varchar(20) not null,
nombre varchar(200) not null,
sexo varchar(1) not null,
fNacimiento FechaHistorica,
fMuerte FechaHistorica,
generales nclob,
constraint pkPersona primary key( persona ),
constraint chkSexo check( sexo = 'M' or sexo = 'm' or sexo = 'F' or sexo = 'f' )
);
只是想知道:为什么使用Object而不是Date列?