Plsql 如何在PL/SQL中获取嵌套记录中的数据?

Plsql 如何在PL/SQL中获取嵌套记录中的数据?,plsql,plsqldeveloper,Plsql,Plsqldeveloper,我正在尝试嵌套记录示例。 请看申报部分 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 W

我正在尝试嵌套记录示例。 请看申报部分

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.
感谢您的帮助。

您的记录类型r\u emp是一个标量属性和一个记录的组合,因此您需要在“选择到”中反映这一点。比如:

select emp.first_name||' '||emp.last_name, dept.*
into   r_emp_row.name, r_emp_row.deptrec.dempno, r_emp_row.deptrec.dname ...

顺便说一句,与问题无关的是,当其他结构为空时,这是一个众所周知的危险结构:


如果没有员工100怎么办?好吧,它什么也不做——也许没关系。如果有一个雇员100,但索引中有一个损坏的块,导致ORA-01578查询失败:ORACLE数据块是否损坏,具体取决于执行计划?它什么也不做,也不告诉你,你会认为没有100名员工。

这种结构的目的是什么?也许您可以在select*from xxx LOOP rec.column\u name end LOOP中为rec使用FOR LOOP语句来简化此过程;是的,我知道FOR循环语句,而且它比嵌套记录更可取。这个问题是在培训期间提出的。当其他人认为空是一个众所周知的危险结构:是的,我同意你。然而,这一点与异常部分无关,而是与填充嵌套记录以及如何操作有关?无论如何,您的建议很有帮助!我的答案是从如何进行选择开始的。我刚刚添加了一条关于异常隐藏的注释,开始是“顺便说一句”,但是请跳过它,集中在第一部分。