我正在尝试从表中计算每个托盘的总板坯#的程序prod_result并将该计数插入或更新到具有相同托盘#(plt_no)的表中plt_result数量列
我尝试插入,更新两者,但不起作用。
create or replace PROCEDURE update_qty
is
v_plt_no nvarchar2(20);
v_qty number;
cursor q1 is
select count(slab_no)
into v_qty
from prod_result
where plt_no = v_plt_no;
begin
if v_qty > 0 then
update plt_result
set qty = 'v_qty'
where plt_no = v_plt_no;
end if;
end;
我在这里做错了什么?请帮忙。
我不确定您要查找哪个版本 - 它是循环遍历表中所有PLT_NOs的版本,还是应该接受PLT_NO作为参数的版本。这是两个选项,看看它们是否有帮助。
第一个使用游标 FOR 循环;它更容易维护,因为 Oracle 为您完成了大部分繁琐的工作(打开游标、获取、退出循环、关闭游标)。
create or replace procedure update_qty
is
begin
for cur_r in (select plt_no, count(slab_no) v_qty
from prod_result
group by plt_no
)
loop
if cur_r.v_qty > 0 then
update plt_result r set
r.qty = cur_r.v_qty
where r.plt_no = cur_r.plt_no;
end if;
end loop;
end;
第二个接受PLT_NO作为参数:
create or replace procedure update_qty
(par_plt_no in prod_result.plt_no%type)
is
v_qty number;
begin
select count(p.slab_no)
into v_qty
from prod_result p
where p.plt_no = par_plt_no;
if v_qty > 0 then
update plt_result r set
r.qty = v_qty
where r.plt_no = par_plt_no;
end if;
end;
类似于
以下内容,您实际打开并从光标中获取。您必须为 v_plt_no 分配一个值,以便光标获取任何内容。
create or replace PROCEDURE update_qty
is
v_plt_no nvarchar2(20);
v_qty number;
cursor q1 is
select count(slab_no)
into v_qty
from prod_result
where plt_no = v_plt_no;
begin
OPEN q1;
FETCH q1 INTO v_qty;
CLOSE q1;
if v_qty > 0 then
update plt_result
set qty = 'v_qty'
where plt_no = v_plt_no;
end if;
end;