Oracle 从plsql中的另一个过程引用变量

Oracle 从plsql中的另一个过程引用变量,oracle,plsql,Oracle,Plsql,我写了一个包: CREATE OR REPLACE PACKAGE BODY NEW_HIRE_PKG AS PROCEDURE load_emp( errbuf OUT VARCHAR2, retcode OUT VARCHAR2 ) AS CURSOR cur_person_info IS SELECT * FROM table_abc; CURSOR cur_person_a

我写了一个包:

CREATE OR REPLACE
    PACKAGE BODY NEW_HIRE_PKG
    AS
    PROCEDURE load_emp(
        errbuf OUT VARCHAR2,
        retcode OUT VARCHAR2 )
    AS
      CURSOR cur_person_info
      IS
        SELECT * FROM table_abc;
      CURSOR cur_person_adr
      IS
        SELECT * FROM table_adr;
      l_person_id      NUMBER;
      l_emp_num        NUMBER;
      lv_add_type      VARCHAR2(100);
      lv_address_line1 VARCHAR2(100);
    BEGIN
      FOR person_info_rec IN cur_address_info
      LOOP
        hr_employee_api.create_employee ( p_validate => FALSE,
        --INPUT Parameter
        P_HIRE_DATE =>person_info_rec.DATE_START,
        -- output
        p_employee_number => lc_employee_number, p_person_id => ln_person_id );
      END LOOP ;
    END;

PROCEDURE load_add(
            errbuf OUT VARCHAR2,
            retcode OUT VARCHAR2 )
as 
ln_person_id number;

        BEGIN
          FOR address_info_rec IN cur_address_info
          LOOP
            BEGIN
              hr_person_address_api.create_person_address 
              (p_validate => FALSE,
              p_effective_date => TRUNC(SYSDATE),
              p_person_id=> ln_person_id,   
              --output
              p_address_type => lv_add_type,
              p_address_line1 => lv_address_line1);

           end; 
         end loop;
        end;
      end; 

现在在程序加载添加中有一个变量ln_person_id,它应该是程序加载emp中生成的人员id。我想一个一个地通过这个程序。我可以通过将ln\u person\u id设置为对象来实现吗?

根据您的代码判断,您有两个并发程序—一个调用load\u emp(),另一个调用load\u add()。如果这确实是您想要的结构,那么这两个调用将在单独的会话中运行,并且您无法将变量从一个传递到另一个。您最好将load\u emp中的所有person\u id值保存在自定义表中。数据随后可能会被load_add()使用


不过,我会重组你的方案。为什么不在load_emp()的循环中调用load_add()?

根据您的代码判断,您有两个并发程序—一个调用load_emp(),另一个调用load_add()。如果这确实是您想要的结构,那么这两个调用将在单独的会话中运行,并且您无法将变量从一个传递到另一个。您最好将load\u emp中的所有person\u id值保存在自定义表中。数据随后可能会被load_add()使用

不过,我会重组你的方案。为什么不在load_emp()的循环中调用load_add()