我正在尝试使用嵌套记录示例。 请看声明部分。
DECLARE
TYPE r_emp IS RECORD (
name VARCHAR2(50),
dept_rec departments%ROWTYPE
);
r_emp_row r_emp;
BEGIN
SELECT emp.first_name||' '||emp.last_name,dept.*
INTO r_emp_row
FROM employees emp,departments dept
WHERE emp.department_id = dept.department_id
AND emp.employee_id = 100;
DBMS_OUTPUT.PUT_LINE('Name:'||r_emp_row.name);
DBMS_OUTPUT.PUT_LINE('Department ID:'||r_emp_row.dept_rec.department_id);
DBMS_OUTPUT.PUT_LINE('Department Name:'||r_emp_row.dept_rec.department_name);
EXCEPTION
when others then
null;
END;
我正在尝试运行以上阻止,但收到如下错误:
Error report -
ORA-06550: line 10, column 8:
PLS-00597: expression 'R_EMP_ROW' in the INTO list is of wrong type
ORA-06550: line 11, column 3:
PL/SQL: ORA-00904: : invalid identifier
ORA-06550: line 9, column 3:
PL/SQL: SQL Statement ignored
06550. 00000 - "line %s, column %s:\n%s"
*Cause: Usually a PL/SQL compilation error.
帮助表示赞赏。
答案 0 :(得分:3)
您的记录类型r_emp
是一个标量属性和一个记录的组合,因此您需要在select into
中反映出来。类似的东西:
select emp.first_name||' '||emp.last_name, dept.*
into r_emp_row.name, r_emp_row.deptrec.dempno, r_emp_row.deptrec.dname ...
与问题无关,when others then null
是一个着名的危险建筑:
What is bad in "When Others Then Null" in PL/SQL?
http://www.orafaq.com/wiki/WHEN_OTHERS
http://tkyte.blogspot.co.uk/2008/06/when-others-then-null-redux.html
如果没有员工100怎么办?好吧,它什么都不做 - 也许那没关系。如果有一个员工100但是索引中有一个损坏的块导致查询失败并且 ORA-01578:ORACLE数据块已损坏,或者不是,这取决于执行计划怎么办?它什么都不做,也没有告诉你,你会认为没有员工100。