0

使用此查询插入数据时遇到问题:

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

我的代码有问题吗?

4

1 回答 1

2

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

于 2021-09-06T17:28:48.377 回答