PLSQL - процедура с несколькими записями - PullRequest
0 голосов
/ 19 ноября 2018

Создайте процедуру, называемую пререквизитами. Создайте пользовательскую запись с четырьмя полями: course_no, description, cost и prerequisite_rec. Последнее поле, prerequisite_rec, должно быть пользовательской записью с тремя полями: prereq_no, prereq_desc и prereq_cost. Для всех курсов, которые имеют обязательный курс, заполните пользовательскую запись всеми соответствующими данными и отобразите ее информацию на экране.

Я пытаюсь выяснить этот вопрос, и формулировка из него просто сбивает с толку. Насколько я понимаю, процедура должна создаваться вместе с записью с 4 пользовательскими полями, но 1 из этих 4 полей также является самой записью с 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

Есть идеи?

1 Ответ

0 голосов
/ 19 ноября 2018

Думаю, вы правы в отношении требований ... вам нужно будет объявить подтип перед тем, как объявить тип. Например (не проверено, поскольку у меня нет доступной среды)

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;
/
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...