我写了一个包:
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设为对象来实现吗?
答案 0 :(得分:2)
根据您的代码判断,您有两个并发程序 - 一个调用load_emp(),另一个调用load_add()。如果这真的是你想要的结构,那么这两个调用将在不同的会话中运行,并且你无法做任何事情来将变量从一个传递到另一个。您可以做的最好的事情是在自定义表中保存load_emp中的所有person_id值。然后,load_add()可以使用该数据。
但是我会重组您的包裹。为什么不在load_emp()中的LOOP中调用load_add()?