2017-05-05 108 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