在使用这个查询插入数据时遇到了麻烦:
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'
,它现在是一个日期文字。同样,文档中还有更多内容。