prosedüründen kullanıcı tanımlı kaydı alma Sonunda çatladım.PLSQL
get_class_infor denilen college_package başka prosedür ekleyin: Burada okulumuzun görev. get_class_infor yordamı, kimliğini, eğitmen adını, kurs başlığını ve belirli bir sınıfının sınıfını almak ve döndürmek için kullanılır. CLASS_ID değerini bir IN parametresi olarak geçirin. Yordamdaki kayıt değişkenleri için kullanıcı tanımlı bir kayıt TYPE tanımlayın.
get_class_infor yordamını çağırmak için bir anonim bir blok oluşturun ve bir sınıf hakkındaki bilgileri görüntüleyin. Aşağıdaki örnek ben bir parametre göndermek ve kullanıcı tanımlı kaydını nasıl alınacağını anlaşılan emin olmak için bu anonim blok oluşturdu
** Class id: 1
** Instructor: Gunther Haas
** Course Title: Algebra I
** Department: Mathematics
01. sınıf kimliğini kullanır. Bu mükemmel çalışıyor.
ANONİM BLOK: sıkıştım
DECLARE
TYPE class_type IS RECORD (
class_id classes.class_id%TYPE,
i_first instructors.first_name%TYPE,
i_last instructors.last_name%TYPE,
course courses.title%TYPE,
dept sections.title%TYPE
);
p_rec class_type;
PROCEDURE get_class_infor(
p_id IN NUMBER,
p_rec OUT class_type
) IS
BEGIN
SELECT cl.class_id, i.first_name, i.last_name, cr.title, s.title
INTO p_rec
FROM classes cl
JOIN instructors i ON cl.instr_id = i.instructor_id
JOIN courses cr ON cl.course_id = cr.course_id
JOIN sections s ON cr.section_code = s.section_code
WHERE class_id = p_id;
END get_class_infor;
BEGIN
get_class_infor(:class_id, p_rec);
DBMS_OUTPUT.PUT_LINE('** Class id: ' || p_rec.class_id);
DBMS_OUTPUT.PUT_LINE('** Instructor: ' || p_rec.i_first || ' ' || p_rec.i_last);
DBMS_OUTPUT.PUT_LINE('** Course Title: ' || p_rec.course);
DBMS_OUTPUT.PUT_LINE('** Department: ' || p_rec.dept);
END;
düzgün paket Spec/beden yaratan, ya da ben öyle varsayalım. Ne eksik olduğumu bilmiyorum. İşte sahip olduğum şey.
Paket özellikleri:
-- Example 4_2A
CREATE OR REPLACE PACKAGE college_package IS
TYPE class_type IS RECORD (
class_id classes.class_id%TYPE,
i_first instructors.first_name%TYPE,
i_last instructors.last_name%TYPE,
course courses.title%TYPE,
dept sections.title%TYPE
);
PROCEDURE get_class_infor (
p_id IN NUMBER,
p_rec OUT class_type
);
END college_package;
AMBALAJ GÖVDE:
-- Example 4_2B
CREATE OR REPLACE PACKAGE BODY college_package IS
PROCEDURE get_class_infor (
p_id IN NUMBER,
p_rec OUT class_type
) IS
BEGIN
SELECT cl.class_id, i.first_name, i.last_name, cr.title, s.title
INTO p_rec
FROM classes cl
JOIN instructors i ON cl.instr_id = i.instructor_id
JOIN courses cr ON cl.course_id = cr.course_id
JOIN sections s ON cr.section_code = s.section_code
WHERE class_id = p_id;
END;
END college_package;
anonim blok:
-- Example 4_2C
DECLARE
TYPE class_type IS RECORD (
class_id classes.class_id%TYPE,
i_first instructors.first_name%TYPE,
i_last instructors.last_name%TYPE,
course courses.title%TYPE,
dept sections.title%TYPE
);
v_rec class_type;
BEGIN
college_package.get_class_infor(:class_id, v_rec);
DBMS_OUTPUT.PUT_LINE('** Class id: ' || v_rec.class_id);
DBMS_OUTPUT.PUT_LINE('** Instructor: ' || v_rec.i_first || ' ' || v_rec.i_last);
DBMS_OUTPUT.PUT_LINE('** Course Title: ' || v_rec.course);
DBMS_OUTPUT.PUT_LINE('** Department: ' || v_rec.dept);
END;
er Ben olsun ror mesajdır:
ORA-06550: satır 12, sütun 4:
PLS-00306: yanlış numara ya da 'GET_CLASS_INFOR'
ORA-06550 çağrısına parametre tipleri: Satır 12, sütun 4:
PL/SQL: Bildirimi
Ben paket spec/vücudu kuruyorum biçiminde bir sorun var mı
gözardı? Cevabı kendim bulmak istiyorum, bu yüzden doğru yönde bir ipucu takdir edilecektir.
Sadece 9 saat sonra ... biraz öldü ve onu haha .. öylesine basitti. Bunu denedim ama 'CLASS_TYPE' tanımlayıcısını 'almalıyım' hatası alıyorum. Bildiride "class_type" den önce "college_package" eksik. Çok teşekkür ederim!! – Bryner
@Bryner - Endişelenme: Kapsam belirleme kuralları inceliklidir ve herkesi gezdirebilir. Parlak tarafta, bu, sizi iyi bir şekilde durduracak isim alanlarının öneminde bir derstir. – APC