试图将记录数返回到我插入的控制台?

时间:2018-05-16 15:43:52

标签: oracle plsql

我正在尝试将符合特定条件的所有数据插入到临时表中。在此示例中,它适用于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;
/

2 个答案:

答案 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