为什么这个简单的插入查询不起作用?

时间:2015-05-21 14:42:59

标签: sql oracle

我不是很喜欢数据库,我在一个名为 CODA_TX 的表中实现一个简单的插入查询(在 Oracle db上)有一些问题,该表具有以下结构:

describe CODA_TX
Nome                 Nullo    Tipo           
-------------------- -------- -------------- 
PK_CODA              NOT NULL NUMBER(10)     
FK_TIPO_DOC                   NUMBER(4)      
FK_PIVA_MITTENTE              VARCHAR2(16)   
FK_CDZZ                       VARCHAR2(4)    
DATA_IN                       DATE           
FK_STATO             NOT NULL NUMBER(2)      
DATA_OUT                      DATE           
NUM_DOC                       VARCHAR2(35)   
CANALE                        VARCHAR2(3)    
SIZE_XML                      NUMBER(10)     
FK_PIVA_DESTINATARIO          VARCHAR2(20)   
INDIRIZZAMENTO                VARCHAR2(100)  
SIGNATURE                     VARCHAR2(1)    
PRG_CONSERVAZIONE             NUMBER(10)     
MIT_DATA_CONS                 DATE           
MIT_LOTTO_CONS                VARCHAR2(50)   
DES_DATA_CONS                 DATE           
DES_LOTTO_CONS                VARCHAR2(50)   
SEGNALAZIONE                  VARCHAR2(4000) 
IDOC_NUM                      NUMBER         
CODICE_UFFICIO_PA             VARCHAR2(6)    
IDENTIFICATIVO_SDI            NUMBER(12)     
NOME_FILE_SDI                 VARCHAR2(50)

所以我已经实现了这个插入查询来创建一个新记录。如你所见,我指定了一些必须加价的字段,未指定我认为应该自动设置为 null (它是否正确?):

insert into 
  CODA_TX (PK_CODA, 
           FK_TIPO_DOC, 
           FK_PIVA_DESTINATARIO, 
           DATA_IN, 
           FK_STATO, 
           DATA_OUT, 
           CANALE, 
           SIZE_XML, 
           FK_PIVA_MITTENTE) 
   values(70045, 
           5, 
           01392380547, 
           Thu May 21 16:33:40 CEST 2015, 
           2, 
          Thu May 21 16:33:40 CEST 2015, 
           WEB, 
           554, 
           01392380547)

问题是执行此查询时我收到此错误消息:

Bind variable "33" non dichiarata (NOT DECLARED)
0 righe inserito.

它究竟意味着什么?我错过了什么?我该如何解决这个问题?

TNX

1 个答案:

答案 0 :(得分:4)

  

5月21日星期四16:33:40 CEST 2015

既不是字符串也不是日期

DATA_IN DATA_OUT 列数据类型为DATE,日期不能包含时区。

  • 添加单引号,首先使其成为文字。
  • 使用 TO_DATE 和正确的 FORMAT MODEL 将文字转换为日期。
  • 删除时区元素,或首先将列的数据类型更改为 TIMESTAMP

好像你没有花费任何精力去研究和理解从answerprevious question的所有内容。

  

WEB

您必须始终将字符串值括在单引号中。

例如,

'WEB'
  

01392380547

NUMBER 不能以零开头。由于您将其声明为 VARCHAR2 数据类型,请将其括在单引号

最重要的问题是,您的值与列不匹配。例如,第三个最后一个值Thu May 21 16:33:40 CEST 2015映射到列CANALE。但是,该列描述为:

  

CANALE VARCHAR2(3)

因此,使用简单插入查询,您有基本问题