时间戳Oracle SQL ORA-01756

时间:2015-05-05 17:47:59

标签: sql oracle

Hello刚开始做我的第一个SQL项目并使用Oracle Database 11g企业版11.2.0.1.0版。

我正在尝试做这样的事情:

INSERT INTO appointment VALUES(  
  000000001, 
  123456789, 
  ‘2008-09-27 09:12:47’, 
  '22-JUN-1964’,  
  00001, 
  123000000);

我甚至尝试过这样做,然后是值:

INSERT INTO appointment (visitID, pSSN, time, bdate, deptID, empSSN)

这是我创建的表格

CREATE TABLE appointment( 
    visitID NUMBER(9) NOT NULL, 
    pSSN NUMBER(9),
    time TIMESTAMP, 
    bdate DATE, 
    deptID NUMBER(5), 
    empSSN NUMBER(9),
  PRIMARY KEY(visitID), FOREIGN KEY( pSSN ) REFERENCES patient( pSSN ),
  FOREIGN KEY( deptID ) REFERENCES department(deptID), 
  FOREIGN KEY (empSSN ) REFERENCES employee( empSSN ) 
 );

我仍在收到ORA-01756:引用字符串未正确终止 我不确定它是否与时间戳或日期有关,因为我将这样的值插入到其他表中。感谢您的任何帮助。

1 个答案:

答案 0 :(得分:6)

你有一个混合的正常引号和单引号,可能来自非纯文本文档的剪切和粘贴:

INSERT INTO appointment VALUES(000000001, 123456789,
  '2008-09-27 09:12:47', '22-JUN-1964', 00001, 123000000);

使用SO使用的代码格式,您可以看到三个卷曲引号(也标有^),单独的直引号是不同的颜色。 将它们全部改为直引号:

INSERT INTO appointment (visitID, pSSN, time, bdate, deptID, empSSN)
VALUES(000000001, 123456789,
  TO_TIMESTAMP('2008-09-27 09:12:47', 'YYYY-MM-DD HH24:MI:SS'),
  TO_DATE('22-JUN-1964', 'DD-MON-YYYY'),
  00001, 123000000);

最好包含您要插入的列名,尤其是当您的错误顺序值时,更容易发现。但您也依赖于NLS日期和时间戳格式。您应该使用显式格式掩码:

INSERT INTO appointment (visitID, pSSN, time, bdate, deptID, empSSN)
VALUES(000000001, 123456789,
  TIMESTAMP '2008-09-27 09:12:47', DATE '1964-06-22',
  00001, 123000000);

或者使用您正在使用的固定数据,日期和时间戳文字:

{{1}}