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循环语句,而且它比嵌套记录更可取。这个问题是在培训期间提出的。当其他人认为空是一个众所周知的危险结构:是的,我同意你。然而,这一点与异常部分无关,而是与填充嵌套记录以及如何操作有关?无论如何,您的建议很有帮助!我的答案是从如何进行选择开始的。我刚刚添加了一条关于异常隐藏的注释,开始是“顺便说一句”,但是请跳过它,集中在第一部分。