Я новичок в PLSQL и делаю пару упражнений с использованием Bulk SQL. У меня есть следующий пакет:BULK COLLECT INTO: 'идентификатор' должен быть объявлен
/*Update a commision with a new factor*/
FUNCTION commision_pct_update(p_job_id jobs.job_id%type, p_factor NUMBER) RETURN NUMBER;
и следующее тело:
FUNCTION commision_pct_update(p_job_id jobs.job_id%type, p_factor NUMBER) RETURN NUMBER AS
BEGIN
SELECT job_id BULK COLLECT INTO v_employees_tab FROM employees;
FORALL i IN v_employees_tab.FIRST..v_employees_tab.LAST
UPDATE employees SET commission_pct = (commission_pct * p_factor)
WHERE commission_pct is not null AND job_id = p_job_id;
RETURN SQL%ROWCOUNT;
END commision_pct_update;
я получаю следующее сообщение об ошибке в сообщениях журнала. (Я использую Oracle SQL Developer).
Error (43,37): PLS-00201: идентификатор 'V_EMPLOYEES_TAB' должен быть объявлен
Я не знаю, где и как объявить идентификатор в функции.
EDIT:
Спасибо, но откуда я знаю правильный тип. Я редактировал свой вопрос с изображением таблицы. – Verhelst
@ XverhelstX Я не уверен, вы делаете некоторые странные вещи здесь: выбор типа из другой таблицы: вы передаете переменную типа из 'jobs.jobs_id' (возможно, целое число), но выбираете строки от 'сотрудника'. Затем вы используете 'forall', но не используете переменную' forall' (которая будет 'i' в вашем случае) в цикле. Проверьте эту статью, она может указать вам направление того, чего вы хотите достичь: http://www.oracle.com/technetwork/issue-archive/2012/12-sep/o52plsql-1709862.html – Jcl
* Для чего я понимайте * (что может быть неправильно) из вашего кода, вы могли бы просто сделать с 'update', а не использовать' bulk collect' или 'forall' вообще, но опять же, я не совсем уверен – Jcl