#oracle #plsql
Вопрос:
Я создал входящие и исходящие объекты, как показано ниже
create or replace TYPE O_item_tkt_tab AS OBJECT
(
item varchar2(25),
ticket_type_id varchar2(4),
Msg_type varchar2(50));
create or replace TYPE O_item_tkt_rec_tab
AS TABLE OF O_item_tkt_tab;
create or replace TYPE I_item_tkt_tab AS OBJECT (
item varchar2(25),
item_Action varchar2(50),
ticket_type_id varchar2(4),
ticket_type_id_action varchar2(50),
count number(5,0)
);
create or replace TYPE I_item_tkt_rec_tab AS TABLE OF I_item_tkt_tab;
и создал процедуру, как показано ниже
CREATE OR REPLACE PROCEDURE item_tkt_tab(
In_Item_tab IN I_item_tkt_rec_tab ,
Out_Item_tab OUT O_item_tkt_rec_tab
)
IS
L_Tkt_stat varchar2(10);
L_Item varchar2(25);
L_ticket_type_id varchar2(4);
CURSOR c_get_tkt_tab(L_Item varchar2,L_ticket_type_id varchar2)
IS
SELECT 1 from item_ticket
where item =L_Item
and ticket_type_id = L_ticket_type_id;
BEGIN
Out_Item_tab := O_item_tkt_rec_tab();
FOR i IN 1 .. In_Item_tab.COUNT
LOOP
open c_get_tkt_tab(In_Item_tab(i).Item,In_Item_tab(i).ticket_type_id);
FETCH c_get_tkt_tab into L_Tkt_stat;
CLOSE c_get_tkt_tab;
if L_Tkt_stat is not null
then
Out_Item_tab := O_item_tkt_rec_tab(In_Item_tab(i).item,In_Item_tab(i).ticket_type_id,'XItemTicketCre') ;
else
Out_Item_tab := O_item_tkt_rec_tab(In_Item_tab(i).item,In_Item_tab(i).ticket_type_id,'XItemTicketMod') ;
end if;
END LOOP;
EXCEPTION
WHEN OTHERS
THEN
Out_Item_tab := NULL;
END;
но получаю сообщение об ошибке
Error at line 28: PLS-00306: wrong number or types of arguments in call to 'O_ITEM_TKT_REC_TAB'
Error at line 28: PLS-00306: wrong number or types of arguments in call to 'O_ITEM_TKT_REC_TAB'
Error at line 28: PLS-00306: wrong number or types of arguments in call to 'O_ITEM_TKT_REC_TAB'
Error at line 30: PL/SQL: Statement ignored
Error at line 30: PLS-00306: wrong number or types of arguments in call to 'O_ITEM_TKT_REC_TAB'
Error at line 30: PLS-00306: wrong number or types of arguments in call to 'O_ITEM_TKT_REC_TAB'
Error at line 30: PLS-00306: wrong number or types of arguments in call to 'O_ITEM_TKT_REC_TAB'
Error at line 28: PL/SQL: Statement ignored
пожалуйста, помогите мне решить эту проблему
Ответ №1:
o_item_tkt_rec_tab
представляет собой набор o_item_tkt_tab
, поэтому задание должно быть таким:
if l_tkt_stat is not null then
out_item_tab :=
o_item_tkt_rec_tab(
o_item_tkt_tab(in_item_tab(i).item, in_item_tab(i).ticket_type_id, 'XItemTicketCre' )
);
else
out_item_tab :=
o_item_tkt_rec_tab(
o_item_tkt_tab(in_item_tab(i).item, in_item_tab(i).ticket_type_id, 'XItemTicketMod')
);
end if;
Обычно _tab
в имени типа указывается коллекция (тип таблицы), поэтому немного сбивает с толку, что o_item_tkt_tab
это тип объекта, а не коллекция.
Мне также не ясно, что i_
o_
означают префиксы и.
Комментарии:
1. Привет.. У меня есть еще один вопрос… в моем входном объекте я определил одну переменную ticket_type_id_action . Теперь я должен написать логику в приведенной ниже процедуре, если ticket_type_id_action-это изменение,затем обновление,, если нет изменений, то нет обновления. пожалуйста, помогите мне в этом
2. Звучит как новый вопрос 🙂