插入0行 - 如何解决此问题?

MrP*_*les 1 sql oracle insert

我试图通过SQL Developer v3.0.04将多行插入到SQL,Oracle表中

数据库是由Uni设置的,所以我不知道它是什么版本.

在线查看之后,我提出了下面的代码,但它不会插入任何数据.我用一行测试了插件,这没问题.我错过了什么?

Insert all 
  Into Patient Values
    ('101', '1 house', Null, 'Kingston', 'Surrey', 'KT1 1XX', '10/jan/1980', 'm', 01452987456)
  Into Patient Values
    ('102', '2 egg rd', 'vail', 'guildford', 'Surrey', 'GU1 1LL', '05/dec/1985', 'm', 01452987456)
  Into Patient Values
    ('103', '6 station rd', Null, 'guildford', 'Surrey', 'GU1 2XX', '15/may/1990', 'f', 01452987456)

Select * from Patient;
Run Code Online (Sandbox Code Playgroud)

Jus*_*ave 6

INSERT ALL有两种不同的用途.一种是将所选列的不同子集插入表中.另一种是根据某些标准将行指向不同的行.在这两种情况下,数据都来自SELECT子句而不是来自VALUES. 请参阅文档中的示例.

通常,您只需INSERT在单个PL/SQL块中编写多个语句.就像是

begin
  Insert Into Patient Values
    ('101', '1 house', Null, 'Kingston', 'Surrey', 'KT1 1XX', '10/jan/1980', 'm', 01452987456);
  Insert Into Patient Values
    ('102', '2 egg rd', 'vail', 'guildford', 'Surrey', 'GU1 1LL', '05/dec/1985', 'm', 01452987456);
  Insert Into Patient Values
    ('103', '6 station rd', Null, 'guildford', 'Surrey', 'GU1 2XX', '15/may/1990', 'f', 01452987456);
end;
/
Run Code Online (Sandbox Code Playgroud)

如果你真的想在单个SQL语句中执行此操作,则可以执行此操作,INSERT ... SELECT但这通常比使用三个单独的语句更复杂.

insert into patient
  select *
    from (select '101' id, '1 house' addr, null col1, 'Kingston' city, ...
            from dual
          union all
          select '102', '2 egg rd', 'vail', 'guildford', 'Surrey', 'GU1 1LL', '05/dec/1985', 'm', 01452987456
            from dual
          union all
          select '103', '6 station rd', Null, 'guildford', 'Surrey', 'GU1 2XX', '15/may/1990', 'f', 01452987456
            from dual)
Run Code Online (Sandbox Code Playgroud)

我还提醒您使用正确的数据类型并在INSERT语句中指定列名.我猜,例如,Patient表的第一列是某种PatientID被定义为a的NUMBER.如果是这样,你真的想插入一个数字而不是一个字符串.类似地,具有诸如'15/may/1990'之类的值的第七列可能DATE在表中被定义为a .如果是这样,您INSERT应该通过使用特定格式掩码DATE显式调用TO_DATE或使用ANSI日期格式插入非字符串,即date '1980-01-10'.如果您希望最后一列保留前导0,则需要确保将数据库中的列定义为a VARCHAR2并插入字符串而不是数字.