Как передать параметр процедуры явному курсору?
Правильна ли такая запись передачи параметра процедуры O_ID, параметру курсора O_ID? Их имена совпадают, не нужно ли дать разные?
Делаю так:
CREATE OR REPLACE PROCEDURE test_insert (O_ID IN NUMBER)
IS
CURSOR cur_data(O_ID Order_Pos.order_id%TYPE) IS
SELECT * FROM Order_Pos WHERE order_id=O_ID;
TYPE cur_data_s IS TABLE OF cur_data%ROWTYPE;
cur_data_e cur_data_s;
Ответы (1 шт):
Автор решения: 0xdb
→ Ссылка
Да, правильно. Имя параметра O_ID для процедуры и курсора может полностью совпадать. Имена в пространстве имён курсора перепишут теже имена из пространства имён процедуры.
Обратите внимание на имена параметров при открытие курсора. Oни полностью совпадают, слева от => - формальный параметр, а справа от него - актуальный:
create table order_pos (id number (10), order_id number (10))
/
create or replace procedure proc (O_ID Order_Pos.order_id%type) is
cursor cur (O_ID Order_Pos.order_id%type) is
select * from Order_Pos where order_id=O_ID;
type orderposT is table of cur%rowtype;
orderpos orderposT;
begin
open cur (O_ID => O_ID);
fetch cur bulk collect into orderpos;
close cur;
end;
/
Procedure PROC compiled