【发布时间】:2014-08-13 12:21:19
【问题描述】:
我在使用Oracle,我想定义一个如下的存储过程,基本上它会检查传入的p_id是否为null,如果为null则使用table_1的序列生成一个id,否则使用传入的p_id。
tbl_ids_type 是我定义的嵌套表类型,包含数字id。
我想做的是在LOOP部分,在插入table_2之前,我想查询table_2为select name1, name2 from table_2 where s_id = p_id_list(i),这是因为具有特定s_id的记录可能已经存在于表中,我想重新使用name1 和 name2 的值。
我该怎么做?
procedure save
(
p_id number default null,
p_name varchar2 default null,
p_id_list tbl_ids_type default null,
p_user_id number default null
)
is
tmp_id numeric;
begin
if p_id is null then
tmp_id := seq_1.nextval;
insert into table_1 (
id,
name,
original_id,
user_id,
)
values(
tmp_id,
p_name,
-1,
p_user_id,
for i in 1 .. p_id_list.COUNT
LOOP
insert into table_2(
s_id,
id,
name1,
name2,
user_id
)
values (p_id_list(i), tmp_id, 'test_name1', 'test_name2', p_user_id);
END LOOP;
else
delete from table_1 where id = p_id and user_id = p_user_id;
delete from table_2 where id = p_id and user_id = p_user_id;
insert into table_1 (
id,
name,
original_id,
user_id,
)
values(
p_id,
p_name,
'-1',
p_user_id,
for i in 1 .. p_id_list.COUNT
LOOP
insert into table_2(
s_id,
id,
name1,
name2,
user_id
)
values (p_id_list(i), p_id, 'test_name1', 'test_name2', p_user_id);
END LOOP;
end if;
end save_report;
【问题讨论】:
标签: oracle stored-procedures plsql