Неверный номер в SQL Разработчик для тестирования запросов - PullRequest
1 голос
/ 05 апреля 2020

Я пытаюсь проверить свои запросы на основе этой таблицы:

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

Я получаю сообщение об ошибке неверного номера, и я не понимаю почему. На моем тесте тоже ничего не подходит.

Ответы [ 2 ]

1 голос
/ 05 апреля 2020

Вы определили First_Name как NUMBER(15). Вы, вероятно, имели в виду VARCHAR2(15).

Кроме того, у вас есть смесь CHAR, VARCHAR и VARCHAR2. Все они должны быть VARCHAR2. (CHAR покажется работающим, но это просто вызывает проблемы без дополнительной выгоды ).

create table person
( person_id         number(10) primary key
, first_name        varchar2(15)  -- Not number
, last_name         varchar2(15)
, middle_name       varchar2(15)
, street_address    varchar2(35)
, city              varchar2(30)  -- Increased from 10
, state             varchar2(2)
, zipcode           varchar2(5)
, country           varchar2(3) not null  -- increased size to 3 to fit 'USA'
, birth_date        date not null
, gender            varchar2(1)
, phone             varchar2(10)
, email             varchar2(25)
, is_patient        varchar2(1)
, is_physician      varchar2(1)
, is_employee       varchar2(1)
, is_volunteer      varchar2(1)
);

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  -- Not '1234'
, 'Jill', 'Palmer', 'Wendy'
, '123 Apple Court', 'Bronx', 'NY', '10472', 'USA'
, to_date('09/15/1956', 'MM/DD/YYYY')  -- Corrected format mask (alternatively: date '1956-09-15')
, 'F'
, '9178546215'
, 'heygirl5@gmail.com'
, 'Y', 'N', 'N', 'N'  -- Not 'YES'/'NO' because the columns are 1 character
);

Возможно, еще некоторые столбцы должны быть объявлены как NOT NULL. Действительно ли это нормально для человека не иметь имя или адрес или что-то еще, кроме страны и даты рождения? (Вам не нужно указывать NULL для столбца, который можно обнулять, и это затрудняет определение того, какие из них являются обязательными.)

Возможно, большинство столбцов имен должны быть длиннее.

В идеале столбцы Y / N должны быть обязательными и принудительными с помощью проверочных ограничений, например

is_patient  varchar2(1) not null  constraint is_patient_yn_chk check (is_patient in ('Y','N'))
0 голосов
/ 05 апреля 2020

Точная ошибка, которую вы видите, вероятно, вызвана тем, что вы пытаетесь вставить строковое значение в столбец Person_ID, который вы определили как цифра c. Помимо этого, вы должны всегда явно перечислять столбцы для вставки:

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' или * Значение 1009 *, так как вы определили эти столбцы как CHAR(1).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...