希望这个问题
获取错误-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