在向表中插入数据时出现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 )
);

是我的代码有问题吗?

单引号用于字符串字面值;标识符(例如列名)应该用双引号括起来——但只有当它们被创建为带引号的标识符时才需要这样做,然后名称的大小写必须与数据字典名称完全匹配。您的标识符在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',它现在是一个日期文字。同样,文档中还有更多内容。

最新更新