插入Oracle表数据触发ORA-01747错误,求排查SQL代码问题
ORA-01747错误原因及修复方案
触发错误的核心原因
- 插入语句中的列名使用了单引号包裹:Oracle语法规定单引号仅用于标识字符串字面量,表名、列名这类标识符不允许使用单引号包裹。如果是大小写敏感的特殊标识符需要用双引号标注,本次建表时列名均为默认非大小写敏感格式,直接省略引号即可,这是触发ORA-01747错误的直接原因。
- 存在隐式类型转换风险:
tanggal_kadarluarsa字段为DATE类型,直接传入字符串'2023-09-01'依赖当前会话的默认日期格式配置,格式不匹配时会触发日期类型相关报错,建议使用to_date()函数显式做日期类型转换。
修正后的插入语句
保留INSERT ALL写法
INSERT ALL INTO obat (id_obat, nama_obat, tanggal_kadarluarsa, stock, harga) VALUES (1, 'Indomethacin', TO_DATE('2023-09-01', 'yyyy-mm-dd'), 50, 3000) SELECT * FROM dual;
单条插入简化写法
如果仅需要插入单条数据,不需要使用INSERT ALL语法,可简化为:
INSERT INTO obat (id_obat, nama_obat, tanggal_kadarluarsa, stock, harga) VALUES (1, 'Indomethacin', TO_DATE('2023-09-01', 'yyyy-mm-dd'), 50, 3000);
内容的提问来源于stack exchange,提问作者Rizal Maulana
相关产品推荐
相关产品推荐

