#oracle #dml #ora-01747
Вопрос:
у меня возникли проблемы при вставке данных с помощью этого запроса :
INSERT ALL
INTO obat ('id_obat','nama_obat','tanggal_kadarluarsa','stock','harga')
VALUES (1, 'Indomethacin', '2023-09-01', 50, 3000)
SELECT * FROM dual;
это запрос к таблице :
CREATE TABLE obat (
id_obat INTEGER NOT NULL,
nama_obat VARCHAR2(255) NOT NULL,
tanggal_kadarluarsa DATE NOT NULL,
stock INTEGER NOT NULL,
harga NUMBER(20, 2) NOT NULL,
CONSTRAINT obat_pk PRIMARY KEY ( id_obat )
);
что-то не так с моим кодом?
Ответ №1:
Одинарные кавычки предназначены для строковых литералов; идентификаторы (например, имена столбцов) должны быть в двойных кавычках, но только в том случае, если они были созданы как идентификаторы в кавычках, и тогда регистр имени должен точно соответствовать имени словаря данных. Ваши идентификаторы не указаны в инструкции create, поэтому вы можете просто сделать:
INSERT ALL
INTO obat (id_obat,nama_obat,tanggal_kadarluarsa,stock,harga)
VALUES (1, 'Indomethacin', DATE '2023-09-01', 50, 3000)
SELECT * FROM dual;
Если вы действительно хотите процитировать их, вам нужно будет это сделать (включая имя таблицы для демонстрации, поскольку применяются те же правила).:
INSERT ALL
INTO "OBAT" ("ID_OBAT","NAMA_OBAT","TANGGAL_KADARLUARSA","STOCK,HARGA")
VALUES (1, 'Indomethacin', DATE '2023-09-01', 50, 3000)
SELECT * FROM dual;
но это просто больше печатает и, возможно, может быть, труднее читать, и легче ошибиться.
Вы можете прочитать больше об идентификаторах в кавычках и без кавычек в документации.
С помощью одной строки , которая вам на самом деле не нужна ALL
, вы также можете сделать:
INSERT INTO obat (id_obat,nama_obat,tanggal_kadarluarsa,stock,harga)
VALUES (1, 'Indomethacin', DATE '2023-09-01', 50, 3000)
Обратите внимание, что я добавил DATE
ключевое слово в эти инструкции; '2023-09-01'
это не дата, это строковый литерал, поэтому вы полагаетесь на то, что Oracle неявно преобразует его в фактическую дату на основе настроек NLS вашего текущего сеанса. С DATE '2023-09-01'
этим теперь буквальное значение даты. Опять же, в документации есть еще кое-что.
Комментарии:
1. Спасибо, теперь я все понял.