为什么这个insert语句抛出一个表达式错误?

时间:2015-07-16 14:28:03

标签: sql oracle sql-insert

我正在使用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);

3 个答案:

答案 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个表达式)