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

时间:2016-04-19 19:41:40

标签: oracle plsql

我写了一个包:

set +e ## disable the effect of bash -e / set -e
do_something_and_return_errcode; err=$?
set -e ## ...and reenable that flag after

现在在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,它应该是过程load_emp中生成的人ID。我想逐一传递这个过程。我可以通过将ln_person_id设为对象来实现吗?

1 个答案:

答案 0 :(得分:2)

根据您的代码判断,您有两个并发程序 - 一个调用load_emp(),另一个调用load_add()。如果这真的是你想要的结构,那么这两个调用将在不同的会话中运行,并且你无法做任何事情来将变量从一个传递到另一个。您可以做的最好的事情是在自定义表中保存load_emp中的所有person_id值。然后,load_add()可以使用该数据。

但是我会重组您的包裹。为什么不在load_emp()中的LOOP中调用load_add()?