2017-04-06 73 views
0

我試圖解析以下參數爲cursor.executeIntegrityError:ORA-01400:無法將NULL插入

sql_insert = 'insert into sms_messaging (result_sms, msgid, msgparts) values (:1, :2, :3)' 
smsreport_text_new = ('success', '2D67C865FB6FA25A9261C75E8D2F0F2B ', 1) 

cursor.execute(sql_insert, smsreport_text_new) 

後來我收到以下錯誤信息:

IntegrityError: ORA-01400: cannot insert NULL into ("ADAUTH"."SMS_MESSAGING"."DATE_SMS") 

在爲了建立表,我的.sql文件看起來像這樣:

-- Create template 
CREATE TABLE sms_messaging(
    date_sms DATE primary key, 
    result_sms VARCHAR(20), 
    msgid VARCHAR(128), 
    msgparts INTEGER, 
    errorcode INTEGER, 
    errormessage VARCHAR(128) 
); 

即使f或者這個特定的sql_insert沒有date_sms,錯誤消息指出這個問題。我沒有看到我要出錯的地方。我該如何解決這個問題?

回答

2

問題是您的列DATE_SMS被宣佈爲NOT NULL並且沒有默認值。你需要給它一個價值。我不知道它應該是什麼,但可能是這樣的:

insert into sms_messaging (result_sms, msgid, msgparts, date_sms) 
    values (:1, :2, :3, sysdate); 

這將把當前的日期/時間放到字段中。

+0

嗨,謝謝,一些小的改進,但仍然沒有解決。我更新了我的參數(就像你說的那樣)(雖然我改變了表格,所以msgid是主鍵,並且省略了日期)。 cursor.execute行有效,但在刷新SQL Developer Table之後,不會顯示這些條目。 cursor.execute行之後沒有錯誤消息。 – pymat

+0

@pymat。 。 。您可能需要提交更改。 –

+0

解決了這個問題 - 謝謝! :o) – pymat

2

問題是DATE_SMS列是主鍵,因此它不接受NULL值。由於您未在該列的插入語句中提供值,因此您會收到該錯誤。我不確定oracle是什麼,但是在SQL Server中,例如,你可以設置一個列的默認值,例如,我會設置'GETDATE()`作爲日期列的默認值。也許Oracle也有。

+0

嗨,謝謝,一些小的改進,但仍然沒有解決。我更新了我的參數(就像你說的那樣)(雖然我改變了表格,所以msgid是主鍵,並且省略了日期)。 cursor.execute行有效,但在刷新SQL Developer Table之後,不會顯示這些條目。 cursor.execute行之後沒有錯誤消息。 – pymat

1

您不應該有DATE_SMS作爲主鍵!相反使用msg_id

CREATE TABLE sms_messaging(
    date_sms DATE, 
    result_sms VARCHAR(20), 
    msgid VARCHAR(128) primary key, 
    msgparts INTEGER, 
    errorcode INTEGER, 
    errormessage VARCHAR(128) 
); 
+0

嗨,謝謝,一些小的改進,但仍然沒有解決。我更新了我的參數(就像你說的那樣)(雖然我改變了表格,所以msgid是主鍵,並且省略了日期)。 cursor.execute行有效,但在刷新SQL Developer Table之後,不會顯示這些條目。 cursor.execute行之後沒有錯誤消息。 – pymat