我正在尝试将符合特定条件的所有数据插入到临时表中。在此示例中,它适用于last_updated日期晚于表的max_modified_date的任何条目。这件作品对我有用;但是,我通过接受IN参数(任意随机数)和OUT参数(通过将IN参数中的'Random Number'添加到插入的条目数计算得出的数字)来增加一定程度的复杂性。在我的代码中由rUpdated_Row_Count_2变量表示。当我运行代码时,现在打印到我的控制台的唯一值是'0'。我的代码如下:
create or replace procedure test_proc(rUpdated_Row_Count IN NUMBER, rUpdated_ROW_COUNT_2 OUT NUMBER)
is
max_modified_date date;
BEGIN
select max(modify_dt) into max_modified_date from value;
for rec_ in (
select value_id, modify_dt as last_update
from value
) loop
if rec_.last_update > max_modified_date THEN
insert into table2_test( table2_id, last_update )
values( null, rec_.last_update);
rUpdated_Row_Count_2 := rUpdated_Row_Count_2 + 1;
end if;
end loop;
end;
/
DECLARE
rUpdated_Row_Count number;
rUpdated_Row_Count_2 number := 1;
BEGIN
-- dbms_output.put_line(rUpdated_Row_Count || rUpdated_Row_Count_2);
test_proc(1, rUpdated_Row_Count_2);
dbms_output.put_line(rUpdated_Row_Count || rUpdated_Row_Count_2);
END;
/
答案 0 :(得分:2)
如果您添加任何带有NULL值的整数,Oracle将返回NULL,并且在您的代码中,rUpdated_ROW_COUNT_2对于过程是NULL,因为值" 1"您正在通过,而由于OUT参数,校准将不接受。或者,你必须制作" rUpdated_ROW_COUNT_2 OUT NUMBER"到" rUpdated_ROW_COUNT_2 IN OUT NUMBER" 您的程序代码应为:
create or replace procedure test_proc(rUpdated_Row_Count IN NUMBER, rUpdated_ROW_COUNT_2 OUT NUMBER)
is
max_modified_date date;
v_1 number := 0;
BEGIN
select max(modify_dt) into max_modified_date from value;
for rec_ in (
select value_id, modify_dt as last_update
from value
) loop
if rec_.last_update > max_modified_date THEN
insert into table2_test( table2_id, last_update )
values( null, rec_.last_update);
v_1 := v_1 + 1;
end if;
end loop;
rUpdated_Row_Count_2 := v_1;
end;
答案 1 :(得分:0)
非常基本的例子来说明我的评论。在Scott模式中测试它:
DECLARE
PROCEDURE process_recs (p_dept_no scott.dept.deptno%TYPE)
IS
CURSOR e_cur IS
SELECT empno, ename
FROM scott.emp
WHERE deptno = p_dept_no;
v_recs_processed NUMBER:= 0;
BEGIN
FOR e_rec IN e_cur LOOP
v_recs_processed:= e_cur%ROWCOUNT;
END LOOP;
dbms_output.put_line(v_recs_processed);
END;
BEGIN
process_recs(10);
END;
/
输出:
3