Извлечение нескольких записей в процедуре Cursor PLSQL - PullRequest
0 голосов
/ 26 декабря 2018

Таблица: WSH_DEL_DETAILS_INTERFACE

Уникальный столбец: DELIVERY_DETAIL_INTERFACE_ID

Ввод в процедуру : DELIVERY_DETAIL_INTERFACE_ID * 1011 1011* Значения столбцов для извлечения: SALES_ORDER_LINE_NUMBER , SALES_ORDER_NUMBER

Ожидаемый вывод: Отдельная запись

Фактический вывод: Все записи в таблице извлекаются

Код:

create or replace PROCEDURE procedurevalidation(
delivery_detail_interface_id IN 
WSH_DEL_DETAILS_INTERFACE.DELIVERY_DETAIL_INTERFACE_ID%TYPE,
ROW_COUNT OUT INTEGER)
IS
CURSOR wddi_cur IS SELECT *  FROM WSH_DEL_DETAILS_INTERFACE WHERE 
DELIVERY_DETAIL_INTERFACE_ID = delivery_detail_interface_id;
wddi_record WSH_DEL_DETAILS_INTERFACE%ROWTYPE;

BEGIN

OPEN wddi_cur;

LOOP

FETCH wddi_cur into wddi_record;
EXIT when wddi_cur%NOTFOUND;

DBMS_OUTPUT.ENABLE(100000);
DBMS_OUTPUT.PUT_LINE(delivery_detail_interface_id);

DBMS_OUTPUT.PUT_LINE('SALESORDERNUMBER111:::: ' || 
wddi_record.SALES_ORDER_NUMBER);
DBMS_OUTPUT.PUT_LINE('SALESORDERLINENUMBER1111::::: ' || 
wddi_record.SALES_ORDER_LINE_NUMBER);
DBMS_OUTPUT.PUT_LINE('COUNT' || ROW_COUNT);

END LOOP;
CLOSE wddi_cur;


end;

1 Ответ

0 голосов
/ 26 декабря 2018

Вам необходимо изменить имена входных переменных в вашей процедуре.

create or replace PROCEDURE procedurevalidation(
p_delivery_detail_interface_id IN 
WSH_DEL_DETAILS_INTERFACE.DELIVERY_DETAIL_INTERFACE_ID%TYPE,
ROW_COUNT OUT INTEGER)

И в вашем курсоре вам также нужно изменить имя переменной.

CURSOR wddi_cur 
    IS 
SELECT *  
  FROM WSH_DEL_DETAILS_INTERFACE 
 WHERE DELIVERY_DETAIL_INTERFACE_ID = p_delivery_detail_interface_id;

Ваш курсор возвращает все записи в таблице, потому что вы приравниваете сам столбец таблицы и не сопоставляете его с входной переменной в процедуре

...