这是包装规格:
PROCEDURE Save_Countries
( p_inst_id Number,
p_CountryList IN T_COUNTRY_TYPE
)
AS
v_count number;
BEGIN
for i in p_CountryList.first..p_CountryList.last loop
insert into countries (INST_ID, COUNTRY_NAME, COUNTRY_CODE)
values (p_inst_id, p_CountryList(i).COUNTRY_NAME, p_CountryList(i).COUNTRY_CODE);
end loop;
Commit;
end Save_Countries ;
这是类型规范:
create or replace TYPE OBJ_COUNTRY FORCE as OBJECT (
COUNTRY_ID NUMBER(10),
COUNTRY_NAME VARCHAR2(255),
COUNTRY_CODE VARCHAR2(6)
);
create or replace TYPE T_COUNTRY_TYPE as TABLE OF OBJ_COUNTRY;
到目前为止,我有这个:
DECLARE
P_INST_ID NUMBER;
P_COUNTRYLIST T_COUNTRY_TYPE;
BEGIN
P_INST_ID := 255;
PKG_TEST.SAVE_COUNTRIES(
P_INST_ID => P_INST_ID,
P_COUNTRYLIST => P_COUNTRYLIST
);
END;
问题 我试图从我的Oracle SQL Developer调用存储过程。我如何初始化列表(TYPE),以便可以将其作为参数传递。我已经在Google周围搜索,但是找不到任何可以帮助您的东西。
答案 0 :(得分:1)
对于嵌套表,必须初始化并将元素分配给集合。
DECLARE
P_INST_ID NUMBER;
P_COUNTRYLIST T_COUNTRY_TYPE := T_COUNTRY_TYPE(); --initialization
BEGIN
P_INST_ID := 255;
P_COUNTRYLIST.extend(2); --allocate 2 null elements.
P_COUNTRYLIST(1) := OBJ_COUNTRY(1,'INDIA','IND'); --set the values
P_COUNTRYLIST(2) := OBJ_COUNTRY(2,'AUSTRALIA','AUS');
--To assign n more elements, use P_COUNTRYLIST.extend(n);
PKG_TEST.SAVE_COUNTRIES(
P_INST_ID => P_INST_ID,
P_COUNTRYLIST => P_COUNTRYLIST
);
END;
/