【发布时间】:2019-04-29 15:50:25
【问题描述】:
我有两张桌子:
students(student_id, first_name, last_name)
classes(classid, incharge_student_id)
我编写了一个包,它将classid 作为参数,然后为每个班级表的incharge_student_id 从学生表中打印student_id, first_name, last_name
CREATE OR REPLACE PACKAGE pack1
AS
PROCEDURE show_info(c_id classes.classid%TYPE DEFAULT 1, show_info_recordset OUT SYS_REFCURSOR);
END pack1;
/
CREATE OR REPLACE PACKAGE BODY pack1
AS
PROCEDURE show_info
(
c_id NUMBER DEFAULT 1,
show_info_recordset OUT SYS_REFCURSOR
)
IS
v_first_name students.first_name%TYPE;
v_last_name students.last_name%TYPE;
v_students students.student_id%TYPE;
BEGIN
SELECT students.first_name, students.last_name, students.student_id
INTO v_first_name, v_last_name, v_students
FROM students, classes
WHERE (classes.classid = c_id AND classes.incharge_student_id=students.student_id);
DBMS_OUTPUT.PUT_LINE('Class ID: ' || c_id);
DBMS_OUTPUT.PUT_LINE('FIRST NAME: ' || v_first_name);
DBMS_OUTPUT.PUT_LINE('LAST NAME: ' || v_last_name);
DBMS_OUTPUT.PUT_LINE('student_id: ' || v_students);
EXCEPTION
WHEN NO_DATA_FOUND THEN
DBMS_OUTPUT.PUT_LINE('Class ID: ' || c_id || ' not found.');
END;
END pack1;
/
我收到警告消息
Package Body created with compilation errors.
我对 pl/sql 很陌生,想知道为什么会收到错误消息,然后还想知道如何执行一个有参数的包。
我知道如何执行普通包:
variable x refcursor;
exec package_name.procedure_name ( :x );
print x;
但是我将如何使用参数执行我上面的包
【问题讨论】:
标签: oracle stored-procedures plsql package