-1
我是PLSQL的新手,並使用Bulk SQL進行了一些練習。 我有以下的包:BULK COLLECT INTO:'identifier'必須聲明
/*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)。
錯誤(43,37):PLS-00201:標識符 'V_EMPLOYEES_TAB' 必須聲明爲
我不知道在哪裏或如何聲明在函數中的標識符。
編輯:
謝謝,但我怎麼知道正確的類型是。我用我的桌子的圖像編輯了我的問題。 – 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