首页 文章

时间戳Oracle SQL ORA-01756

提问于
浏览
0

您好,刚刚开始执行我的第一个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 回答

  • 6

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

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

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

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

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

    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);
    

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

    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);
    

相关问题