我正在使用Oracle SQL。为什么这个insert语句会抛出一个表达式错误?
INSERT INTO T_DATA(id, object_type, object_id,
measurement_id, derived_ind, no_hist_ind,
display_order, stored_precision, display_precision,
required_ind, mod_user, mod_dtime)
VALUES(SELECT MAX(id) + 1 FROM t_data_point, 'Object', 'ObjectName',
'ID', 3, 0, 1, 2, 2, 0, 'TEST', SYSDATE);
答案 0 :(得分:5)
您的使用方法可以只是INSERT.. INTO.. SELECT..
INSERT INTO T_DATA(id, object_type, object_id,
measurement_id, derived_ind, no_hist_ind,
display_order, stored_precision, display_precision,
required_ind, mod_user, mod_dtime)
(SELECT MAX(id) + 1, 'Object', 'ObjectName',
'ID', 3, 0, 1, 2, 2, 0, 'TEST', SYSDATE
FROM t_data_point);
使用SELECT
内的VALUES
...将它们嵌入括号中。
VALUES(
(SELECT MAX(id) + 1 FROM t_data_point),
...
)
修改强>
确保INSERT
列和VALUES
中的表达式匹配。
答案 1 :(得分:1)
就像MahMaheswaran的回答一样。您仍然可以在使用VALUES时实现查询。您只需要将SELECT语句包装在括号中。
INSERT INTO T_DATA (Id,
object_type,
object_id,
measurement_id,
derived_ind,
no_hist_ind,
display_order,
stored_precision,
display_precision,
required_ind,
mod_user,
mod_dtime)
VALUES (
(
SELECT
MAX(Id) + 1
FROM t_data_point
)
,
'Object',
'ObjectName',
'ID',
3,
0,
1,
2,
2,
0,
'TEST',
SYSDATE);
但是,我仍会使用第一个答案。
答案 2 :(得分:0)
您提供的数据似乎与插入所需的数据量相比较少。
插入t_data(12个表达式)VALUES(11个表达式)