Мне нужно создать сценарий, который помещает номер ключа из таблицы A (который будет использоваться в качестве параметра позже), затем передает этот параметр или номер ключа в запрос, а затем сбрасывает эти результаты в запись хранения или таблицу для последующей обработки и такой. Поскольку каждая выборка содержит более 1 строки (на самом деле на результат запроса или на ключ утверждения приходится 6 строк), я решил использовать предложение массового сбора. Хотя мой первоначальный тест с другой базой данных сработал, я еще не понял, почему настоящий скрипт не работает.
Вот тестовый скрипт, который я использовал:
DECLARE
--Cursors--
CURSOR prod_id is select distinct(product_id) from product order by 1 asc;
CURSOR cursorValue(p_product_id NUMBER) IS
SELECT h.product_description,o.company_short_name
FROM company o,product h
WHERE o.product_id =h.product_id
AND h.product_id =p_product_id
AND h.product_id IS NOT NULL
ORDER by 2;
--Table to store Cursor data--
TYPE indx IS TABLE OF cursorValue%ROWTYPE
INDEX BY PLS_INTEGER;
indx_tab indx;
---Variable objects---
TotalIDs PLS_INTEGER;
TotalRows PLS_INTEGER := 0 ;
BEGIN
--PARAMETER CURSOR RUNS---
FOR prod_id2 in prod_id LOOP
dbms_output.put_line('Product ID: ' || prod_id2.product_id);
TotalIDs := prod_id%ROWCOUNT;
--FLOW PARAMETER TO SECOND CURSOR--
Open cursorValue(prod_id2.product_id);
Loop
Fetch cursorValue Bulk collect into indx_tab;
---data dump into table---
--dbms_output.put_line('PROD Description: ' || indx_tab.product_description|| ' ' ||'Company Name'|| indx_tab.company_short_name);
TotalRows := TotalRows + cursorValue%ROWCOUNT;
EXIT WHEN cursorValue%NOTFOUND;
End Loop;
CLOSE cursorValue;
End Loop;
dbms_output.put_line('Product ID Total: ' || TotalIDs);
dbms_output.put_line('Description Rows: ' || TotalRows);
END;
Test Script Results:
anonymous block completed
Product ID: 1
Product ID: 2
Product ID: 3
Product ID: 4
Product ID: 5
Product ID Total: 5
Description Rows: 6
Обновление: пометка вопроса как «отвеченного». Спасибо.
loop
, возможно, вместо того, чтобы комментировать его). Я не уверен, есть ли у вас какие-либо дополнительные проблемы после исправления опечатки, но если это так, вам следует задать отдельный вопрос, показывающий текущее и желаемое поведение вашего реального блока.dbms_output
действительно следует использовать только для базовой отладки, поскольку клиенты могут не отображать вывод - хотя не уверен, что вы хотите делать с данными. - person Alex Poole   schedule 16.09.2014CUR_CLAIMNUM2.CLAIM_NUM
; но курсор выбираетCLAIM_NO
. Точно такая же ошибка. Извините, но это действительно базовая отладка - посмотрите на ошибку, найдите номер строки в коде, посмотрите, что описано в тексте ошибки... - person Alex Poole   schedule 16.09.2014