我们有一个标识列为dm_id的表。Create语句如下所示:
create table DM_HR_TURNS_IN_OUT_HOURS
(
dm_id number generated always as identity,
action_id NUMBER ,
turns_emp_id NUMBER,
action_date DATE,
action_type VARCHAR2(2),
log_id NUMBER(12),
action_day date,
action_Type_name varchar2(60),
hr_emp_id number(10),
filial varchar2(5),
first_name VARCHAR2(70),
last_name VARCHAR2(70),
middle_name VARCHAR2(70)
)
在一个过程中,有一个游标可以选择源表中的所有列(标识列除外)。然后,在为提取游标的变量创建类型时,将使用该游标:
Cursor c1 is
select
t.id action_id,
t.emp_id turns_emp_id,
t.action_date,
t.action_type,
t.log_id,
trunc(action_date) action_day,
decode(t.action_type, 'I', 'In','O','Out') action_type_name,
e.hr_emp_id,
e.filial,
e.first_name,
e.last_name,
e.middle_name
from ibs.hr_turnstile_emps e ,
ibs.hr_turns_in_out_hours t
where e.turns_emp_id = t.emp_id;
type t_hr_hours is table of c1%rowtype;
v_turn_hours t_hr_hours := t_hr_hours();
现在代码如下所示:
if c1 %isopen then
close c1;
end if;
open c1;
loop
fetch c1 bulk collect
into v_turn_hours limit 100000;
exit when(v_turn_hours.count = 0) ;
forall i in v_turn_hours.first .. v_turn_hours.last
insert into dm_hr_turns_in_out_hours( action_id,turns_emp_id,action_date, action_Type,log_id, action_day,
action_Type_name, hr_emp_id, filial, first_name, last_name, middle_name)
values (v_turn_hours (i));
end loop;
close c1;
commit;
我越来越
ORA-00947-值(v_turn_hours(i))处的值不足错误;
即使我已经在insert语句中指定了所有的普通列,我还是无法运行插入。理想情况下,标识列应该已经生成了序列号。错误的原因可能是什么?
1条答案
按热度按时间1zmg4dgp1#
如果不是手动插入 identity 列的值,那么根本就不应该在
insert
中指定该列,而且应该指定要插入的单独值。我没有您的表,因此我将基于Scott的示例模式创建一个示例。
这是包含标识列的目标表:
PL/SQL代码;注意第13行和第14行,它们显示了我之前解释的内容:
结果: