我正在处理一个接受两个输入的过程(ID(例如。12345
),要输出的批号的数量(例如。5
))
输出序列中的值(??)或其他一些返回值(例如,' 01',' 02',' 03&#39 ;,' 04',' 05')。
该输出基于对表中新的batch_id列的查找,该列默认初始值为' 1'在alter之后(并且是已经有ID列的同一个表)。当客户端应用程序一直呼叫SP时,此列会增加到每个ID(' 0534')的最后一个输出(' 05')的最大值。我有以下代码来使用序列来获取下一个批号:
select btchnum_seq.nextval seq_num
from dual
connect by level <= in_total_batches;
其中in_total_batches是上面提到的param中的第二个。
谢谢大家。
答案 0 :(得分:0)
听起来你想要这样的东西(未经测试)。如果您曾在多用户环境中使用此功能,请注意您可能会获得在不同会话中返回的相同值,并且您可能会在调用后多次返回相同的值。
create table batch (
batch_id integer primary key,
last_val integer not null
);
insert into batch( batch_id, last_val )
values( 12345, 0 );
create procedure get_next_values( p_batch_id IN batch.batch_id%type,
p_num_vals IN integer,
p_values OUT varchar2 )
as
l_start_val integer;
begin
select last_val
into l_start_val
from batch
where batch_id = p_batch_id;
update batch
set last_val = last_val + p_num_vals
where batch_id = p_batch_id;
select listagg( last_val + level, ',' )
within group( order by level )
into p_values
from dual
connect by level <= p_num_vals;
end;