Как передать параметр процедуры явному курсору?

Правильна ли такая запись передачи параметра процедуры 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
→ Ссылка