在SQL表中输入序列,错误-ORA-01858:在应为数字的位置发现了一个非数字字符



希望这个问题

获取错误-ORA-01858:在中应为数字的位置找到非数字字符

会提供一个答案,但这种情况似乎与任何答案都不一样。

我正在做这张桌子

CREATE TABLE Patients 
(PatientID NUMBER(5) PRIMARY KEY, 
FirstName CHAR(20) NOT NULL, 
LastName CHAR(20) NOT NULL, 
ZipCode NUMBER(5) NOT NULL,
City CHAR(20) NOT NULL , 
State CHAR(20) NOT NULL, 
DOB DATE NOT NULL,
EmailAddress CHAR(30) NOT NULL, 
PhoneNumber NUMBER(11) NOT NULL, 
Comments VARCHAR(200));

和这个序列

CREATE SEQUENCE Pat_seq
START WITH 1
INCREMENT BY 1
MINVALUE 0
NOCYCLE;

然后在表格中插入这种格式的

INSERT INTO Patients VALUES 
(Pat_seq.nextval, 
'John', 
'Smith', 
'11277',
'Southampton',
'New York',
'10-Jan-1980',
'John.Smith@gmail.com',
'5555555555',
'No Comments');

昨晚,这在SQL Plus Oracle服务器上成功运行。然而,我只能在学校校园里访问这台服务器,所以为了在家练习,我通过Apex Oracle网站申请了一个工作空间。

当我试图在Apex Workspace上运行insert语句时,我在标题中收到了错误。

ORA-01858: a non-numeric character was found where a numeric was expected
ORA-06512: at "SYS.DBMS_SQL", line 1721

1. INSERT INTO Patients VALUES 
2. (Pat_seq.nextval, 
3. 'John', 

据我所知,之所以触发错误,是因为序列与PatientID是Number数据类型相冲突。我的问题是为什么

这是插入序列的正确方法,不是吗?它在SQL Plus中运行良好,所以这只是Apex Oracle工作区的一个缺陷吗?

编辑:

澄清:-我使用的是Oracle APEX工具19.2版。我很难找到指定它使用的Oracle的确切版本的文档。

  • 完全相同的代码昨晚使用SQL Plus工作

可能是DATE值与默认格式不匹配。您应该使用正确的格式将字符串显式转换为DATE:

TO_DATE ('10-Jan-1980', 'DD-Mon-YYYY')

或者,使用ISO日期文字格式:

DATE '1980-01-10'

此外,由于您没有在INSERT语句中列出表的列,因此可能是您提供的值顺序错误。INSERT语句应该写成:

INSERT INTO Patients 
(PatientID, 
FirstName, 
...)
VALUES
(Pat_seq.nextval, 
'John',
...);

您正在运行哪个版本的Oracle?

我们在12.1.0.2.0上,你使用的语法对我来说很好。

CREATE TABLE my_test(id_number VARCHAR2(10(,序列号(5((;

创建序列my_testrongeq最小值0最大值99999999999999999999以1个增量1个缓存20开始;

插入my_test值(0000000001',my_testrongeq.nextval(;承诺;

从我的测试中选择*(_T(;

结果:

ID_NUMBER XSEQUENCE


0000000001 1

相关内容

最新更新