Stored procedures PLSQL-具有多条记录的过程

Stored procedures PLSQL-具有多条记录的过程,stored-procedures,plsql,oracle12c,record,Stored Procedures,Plsql,Oracle12c,Record,创建一个名为Prerequisies的过程。创建一个包含四个字段的用户定义记录:课程号、说明、成本和先决条件记录。最后一个字段Premission记录应为包含三个字段的用户定义记录:prereq\u no、prereq\u desc和prereq\u cost。对于具有先修课程的所有课程,使用所有相应的数据填充用户定义的记录,并在屏幕上显示其信息 我试图弄明白这个问题,但其中的措辞令人困惑。据我所知,一个过程将与一个包含4个用户定义字段的记录一起创建,但这4个字段中的1个字段本身也是一个包含3个

创建一个名为Prerequisies的过程。创建一个包含四个字段的用户定义记录:课程号、说明、成本和先决条件记录。最后一个字段Premission记录应为包含三个字段的用户定义记录:prereq\u no、prereq\u desc和prereq\u cost。对于具有先修课程的所有课程,使用所有相应的数据填充用户定义的记录,并在屏幕上显示其信息

我试图弄明白这个问题,但其中的措辞令人困惑。据我所知,一个过程将与一个包含4个用户定义字段的记录一起创建,但这4个字段中的1个字段本身也是一个包含3个字段的记录

这是正确的吗

这是我到目前为止所做的

CREATE OR REPLACE PROCEDURE prerequisites (course_no IN NUMBER, 
description OUT VARCHAR2, cost OUT NUMBER, prereq_no OUT NUMBER
,prereq_desc OUT VARCHAR2, prereq_cost OUT NUMBER)
IS
v_course course.course_no%TYPE;

BEGIN
v_course := course_no;
SELECT description, cost, prerequisite
  INTO description, cost, prereq_no
  FROM course
 WHERE course_no = v_course;

SELECT description, cost
  INTO prereq_desc, prereq_cost
  FROM course
 WHERE course_no = prereq_no;


END;
/

DECLARE
TYPE prereqs IS RECORD (prereq_no NUMBER, prereq_desc VARCHAR2(50), prereq_cost NUMBER);
TYPE courses IS RECORD (course_no NUMBER, description VARCHAR2(50), cost NUMBER,
    prerequisite_rec prereqs);

BEGIN
courses.course_no := 25;

prerequisites(courses.course_no, courses.description, courses.cost, prereqs.prereq_no
    ,prereqs.prereq_desc, prereqs.cost);

DBMS_OUTPUT.PUT_LINE(courses.course_no || ' and ' || prereqs.prereq_no);

END;
/
这个过程很好,但是当我执行主块时,我得到了ORA-06550错误

ORA-06550: line 7, column 5:
PLS-00330: invalid use of type name or subtype name
ORA-06550: line 7, column 5:
PL/SQL: Statement ignored
ORA-06550: line 9, column 19:
PLS-00330: invalid use of type name or subtype name
ORA-06550: line 9, column 5:
PL/SQL: Statement ignored
ORA-06550: line 12, column 26:
PLS-00330: invalid use of type name or subtype name
ORA-06550: line 12, column 5:
PL/SQL: Statement ignored

有什么想法吗?

你认为你的要求是对的。。。在声明类型之前,需要先声明子类型。例如(未测试,因为我没有可用的环境)


“对于所有具有先修课程的课程,请使用…”填充用户定义的记录-因此,应该有一个名为course或其他名称的表。它的结构是什么?编辑您的问题,显示表的定义,并添加一些示例数据。我尝试过,它似乎是一种工作,但目前与ORA击中-06550@EricSousa抱歉,应该添加最后一位,一旦声明了类型,就必须使用这些类型声明变量。那么你就可以通过v_blah.course_no ect访问它
Declare

 TYPE prerequisite IS RECORD (prereq_no NUMBER, 
    prereq_desc VARCHAR2(50), prereq_cost NUMBER)

 TYPE courses IS RECORD (course_no NUMBER, description VARCHAR2(50), 
    cost NUMBER, prerequisite_rec prerequisite);

v_blah courses;

begin
   do stuff
end;
/