SQL Developer中用于测试查询的数字无效

SQL Developer中用于测试查询的数字无效,sql,oracle,Sql,Oracle,我正在尝试基于此表测试我的查询: --Create Person Table CREATE TABLE Person ( Person_ID NUMBER(10) PRIMARY KEY, First_Name NUMBER(15) NULL, Last_Name VARCHAR2(15) NULL, Middle_Name VARCHAR2(15) NULL, Street_Address VARCHAR(35) NULL, City VA

我正在尝试基于此表测试我的查询:

--Create Person Table
CREATE TABLE Person
(
    Person_ID NUMBER(10) PRIMARY KEY,
    First_Name NUMBER(15) NULL,
    Last_Name VARCHAR2(15) NULL,
    Middle_Name VARCHAR2(15) NULL,
    Street_Address VARCHAR(35) NULL,
    City    VARCHAR2(10) NULL,
    State   VARCHAR2(2) NULL,
    Zipcode VARCHAR2(5) NULL, 
    Country CHAR(2) NOT NULL, 
    Birth_Date DATE NOT NULL,
    Gender CHAR(1) NOT NULL,
    Phone VARCHAR2(10) NULL,
    Email VARCHAR2(25) NULL,
    Is_Patient CHAR(1) NULL,
    Is_Physician CHAR(1) NULL,
    Is_Employee CHAR(1) NULL,
    Is_Volunteer CHAR(1) NULL 
);
这就是我输入的内容:

INSERT INTO PERSON (Person_ID, First_Name, Last_Name, Middle_Name, Street_Address,
City, State, Zipcode, Country, Birth_Date, Gender, Phone,
Email, Is_Patient, Is_Physician, Is_Employee, Is_Volunteer)

VALUES
    (1234, 'Jill', 'Palmer', 'Wendy', '123 Apple Court',
     'Bronx', 'NY', '10472', 'USA', date '1956-09-15', 'F', '9178546215',
     'heygirl5@gmail.com', 'Y', 'N', 'N','N');

VALUES
    (2345, 'Charles', 'Connor', 'Vanny', '87455 Lemon Drive',
     'Queens', 'NY', '12047', 'USA', date '1953-10-08', 'M', '9178546200',
     'sugahsugah@gmail.com', 'N', 'N', 'Y','N');

VALUES
    (3456, 'Chaniece', 'Boone', 'Pia', '94102 Grape Meaows',
     'Brooklyn', 'NY', '12047', 'USA', date '1983-03-31', 'F', '3479845102',
     'byenow@gmail.com', 'N', 'Y', 'N','N');

VALUES
    (4567, 'James', 'Boone', 'Wayck', '2010 Orange Place',
     'Manhattan', 'NY', '10026', 'USA', date '1981-08-03', 'M', '7187884411',
     'howyoudoin@gmail.com', 'Y', 'N', 'N','N');

VALUES
    (5678, 'Charlton', 'Connor', 'Ethan', '94165 Mango Lane',
     'Staten Island', 'NY', '30124', 'USA', date '1988-12-10', 'M', '6469820145',
     'youcrazyboy@gmail.com', 'Y', 'N', 'N','Y');

SELECT *
FROM PERSON;

我得到一个无效数字的错误,我不明白为什么。我的考试也没有结果

您看到的确切错误可能是由于您试图将字符串值插入已定义为数字的
Person_ID
列。除此之外,您应该始终明确列出插入的列:

INSERT INTO PERSON (Person_ID, First_Name, Last_Name, Middle_Name, Street_Address,
    City, State, Zipcode, Country, Birth_Date, Gender, Phone,
    Email, Is_Patient, Is_Physician, Is_Employee, Is_Volunteer)
VALUES
    (1234, 'Jill', 'Palmer', 'Wendy', '123 Apple Court',
     'Bronx', 'NY', '10472', 'USA', date '1956-09-15', 'F', '9178546215',
     'heygirl5@gmail.com', 'Y', 'N', 'N','N');

还要注意的是,对于
Is_xxx
列,您应该只插入
'Y'
'N'
值,因为您已经将这些列定义为
CHAR(1)

您将
第一个\u名称
定义为
编号(15)
。你的意思可能是
VARCHAR2(15)

此外,还混合了
CHAR
VARCHAR
VARCHAR2
。这些都应该是
VARCHAR2
。(
CHAR
似乎可以工作,但是)

也许更多的列应该声明为NOTNULL。除了国家和出生日期之外,一个人没有名字、地址或其他任何东西真的可以吗?(您不需要为可为空的列指定
NULL
,这样做会更难区分哪些列是必需的。)

可能大多数名称列都应该更长

理想情况下,Y/N列应该是强制性的,并通过检查约束强制执行,例如

is_patient  varchar2(1) not null  constraint is_patient_yn_chk check (is_patient in ('Y','N'))

欢迎使用StackOverflow:如果您发布代码、XML或数据示例,请在文本编辑器中突出显示这些行,并单击编辑器工具栏上的“代码示例”按钮(
{}
),以精确地格式化和语法突出显示它<代码>插入到值中。。。值…开头无效。您只能有一个
values
子句,并且该子句只能在Oracle中插入一行。除了其他注释(全部当场注释)之外,如果患者/医生和员工/志愿者相互排斥,则应将其缩减为一个“status”列。可能是PATIENT_PHYS_STATUS和EMP_VOL_STATUS,每个都有适当的值来指示哪个值,并有一个检查约束来强制执行。@William Robertson我已经创建了带有数字和字符的表。我将尝试Tim Biegeleisen所说的方法,看看这是否可行,因为已经创建了表和模式made@William罗伯逊:这很有道理,哈哈,希望你一周前在这里,当时我正在创建表格,但现在表格已创建,我无法更改它。有没有办法用我现有的来修复它。“我仍然得到一个无效的号码。@DominiqueConnor:为什么你不能更改它?”?我怀疑您的应用程序已经投入生产,所以您仍然可以运行ALTER TABLE来修复错误选择的数据类型(如果它已经投入生产,修复它更为重要)
is_patient  varchar2(1) not null  constraint is_patient_yn_chk check (is_patient in ('Y','N'))