PL/SQL 无法通过 table 将值放入索引
PL/SQL can't put value into index by table
我无法将 v_emp
的值放入我的 emp_table
。
这行全都出错了:
emp_table(counter) := v_emp;
我得到的错误是:
invalid use of type name of subtype name
我看不出是什么问题..
CREATE OR REPLACE PROCEDURE laatste_emp IS
v_emp employees%ROWTYPE;
TYPE emp_table is table of
employees%ROWTYPE INDEX BY PLS_INTEGER;
counter NUMBER := 0;
BEGIN
select * into v_emp
from employees
where hire_date =
(select max(hire_date) from employees);
dbms_output.put_line(v_emp.employee_id || ' ' || v_emp.last_name || ' ' || v_emp.hire_date);
EXCEPTION
WHEN TOO_MANY_ROWS THEN
FOR i in 100 .. 206 LOOP
select * into v_emp
from employees
where employee_id = i
and hire_date = (select max(hire_date) from employees);
IF SQL%FOUND THEN
emp_table(counter) := v_emp;
counter := counter + 1;
END IF;
END LOOP;
END;
/
您的 TYPE emp_table is table of employees%ROWTYPE INDEX BY PLS_INTEGER;
仅声明了一个类型,而不是您可以写入的实际变量。您还需要添加变量:
TYPE emp_table_type is table of employees%ROWTYPE INDEX BY PLS_INTEGER;
emp_table emp_table_type;
请注意我在您的定义中添加了“_type”后缀。
我无法将 v_emp
的值放入我的 emp_table
。
这行全都出错了:
emp_table(counter) := v_emp;
我得到的错误是:
invalid use of type name of subtype name
我看不出是什么问题..
CREATE OR REPLACE PROCEDURE laatste_emp IS
v_emp employees%ROWTYPE;
TYPE emp_table is table of
employees%ROWTYPE INDEX BY PLS_INTEGER;
counter NUMBER := 0;
BEGIN
select * into v_emp
from employees
where hire_date =
(select max(hire_date) from employees);
dbms_output.put_line(v_emp.employee_id || ' ' || v_emp.last_name || ' ' || v_emp.hire_date);
EXCEPTION
WHEN TOO_MANY_ROWS THEN
FOR i in 100 .. 206 LOOP
select * into v_emp
from employees
where employee_id = i
and hire_date = (select max(hire_date) from employees);
IF SQL%FOUND THEN
emp_table(counter) := v_emp;
counter := counter + 1;
END IF;
END LOOP;
END;
/
您的 TYPE emp_table is table of employees%ROWTYPE INDEX BY PLS_INTEGER;
仅声明了一个类型,而不是您可以写入的实际变量。您还需要添加变量:
TYPE emp_table_type is table of employees%ROWTYPE INDEX BY PLS_INTEGER;
emp_table emp_table_type;
请注意我在您的定义中添加了“_type”后缀。