2017-05-05 87 views
0

我试过搜索但没有任何工作,我不知道该怎么做。 有两个外键的表,其中一个可以是null。根据我搜索的内容,具有空外键是完全正确的。但是无论如何,当我尝试在该值中插入null时,它会失败。它说:我无法在外键上插入null

*原因:外键值没有匹配的主键值。

*操作:删除外键或添加匹配的主键。

下面是表的代码。该FK,我想成为空是idPedido

CREATE TABLE PAGOS(
fechaLimite DATE, 
cuantia NUMBER NOT NULL, 
fechaInicio DATE DEFAULT SYSDATE, 
fechaLiquidacion DATE, 
idPago VARCHAR(8) NOT NULL, 
dni VARCHAR(14) NOT NULL, 
tipoPago VARCHAR(7) DEFAULT 'OTRO' CHECK(tipoPAGO IN('MENSUAL','PEDIDO','OTRO')), 
idPedido VARCHAR2(10), 
PRIMARY KEY(idPago), 
FOREIGN KEY(dni) REFERENCES MIEMBROS ON DELETE SET NULL, 
FOREIGN KEY(idPedido) REFERENCES PEDIDOS ON DELETE SET NULL 
); 

有对idPago值一些触发器和这样的补充序列。 下面是创建一个新的项目表中的程序代码:

create or replace PROCEDURE CREAR_PAGO(
    new_fechaLimite IN PAGOS.fechaLimite%TYPE , 
    new_cuantia IN PAGOS.cuantia%TYPE, 
    new_fechaInicio IN PAGOS.fechaInicio%TYPE, 
    new_fechaLiquidacion IN PAGOS.fechaLiquidacion%TYPE, 
    new_dni IN PAGOS.dni%TYPE, 
    new_tipoPago IN PAGOS.tipoPago%TYPE, 
    new_idPedido IN PAGOS.idPedido%TYPE 
) 
    IS 
BEGIN 
    INSERT INTO PAGOS(fechaLimite,cuantia,fechaInicio,fechaLiquidacion,dni,tipoPago,idPedido) VALUES(new_fechaLimite,new_cuantia,new_fechaInicio,new_fechaLiquidacion,new_dni,new_tipoPago,new_idPedido); 
END CREAR_PAGO; 

,这里是我试图插入一个新的元素:

execute CREAR_PAGO('01012020',40,'01012010',null,49035480D,null,null); 

我已经试图把两种“空”和“DEFAULT NULL”表中的代码之后idPedido的类型并没有什么作品

请我需要帮助

+1

您正在与哪些RDBMS合作? –

+0

行/表中有8列,但插入表达式中只有7列。 – philipxy

+0

正如在帖子中所说,我使用触发器来自动生成idPagos,并在触发插入时产生一个安全性。我在我的项目中的每个其他表上使用它,它工作正常。至于为什么我不能添加空FK的任何其他想法? – Lacters

回答

0

它看起来像你的T主键能够是idPago,但我没有在你的插入语句中看到它。如果是这种情况,那么看起来你的问题是试图添加一个没有主键的记录......而不是外键是空的。

+0

正如在文章中所说,我使用触发器来自动生成IDPagos,并在触发插入时使用它。我在我的项目中的每个其他表上使用它,它工作正常。至于为什么我不能添加空FK的任何其他想法? – Lacters