BULK COLLECT INTO:'标识符'必须申报

时间:2015-08-28 06:58:54

标签: oracle plsql

我是PLSQL的新手,并使用Bulk SQL进行了一些练习。 我有以下包裹:

/*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,47):PLS-00201:标识符' V_EMPLOYEES_TAB'必须声明

我不知道在函数中声明标识符的位置或方式。

编辑:

enter image description here

1 个答案:

答案 0 :(得分:1)

您需要在v_employees_tab之前定义变量(BEGIN),并指明其类型...例如:

FUNCTION commision_pct_update(p_job_id jobs.job_id%type, p_factor NUMBER) RETURN NUMBER AS 
   TYPE employees_type IS TABLE OF employees%ROWTYPE INDEX BY PLS_INTEGER; 
   v_employees_tab employees_type;
BEGIN
  [...]

这是一个示例类型的课程,选择正确的