-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