إنتقال للمحتوى

  • تسجيل الدخول عبر الفيس بوك تسجيل الدخول عبر تويتر Log In with LinkedIn Log In with Google      تسجيل دخول    
  • إنشاء حساب

صورة
- - - - -

استفسار عن procedure


4 رد (ردود) على هذا الموضوع

#1 m_nasef

m_nasef

    مشترك

  • الأعضــاء
  • 85 مشاركة

تاريخ المشاركة 14 April 2006 - 01:48 AM

فى هذا الاجراء ....
declare
cursor cur is
select manager_id
from employees;
begin
for rec in cur loop
if rec.manager_id  = 1023  then
null;
end if;
end loop;
raise_application_error(-20101,'Invalid.');
end;
اريد ان اعرف كيف يتحقق هذا الشرط عند صحته وعند عدم صحته....

#2 egyhamada

egyhamada

    مشترك

  • الأعضــاء
  • 194 مشاركة
  • البـلـد: Country Flag

تاريخ المشاركة 16 April 2006 - 02:32 PM

لا يوجد اى جديد سوف يحدث
بعد عدد مرات تكرار ال loop ( طبعا حسب عدد السجلات المسترجعة من ال cursor ) سوف ينفذ الجملة
raise_application_error(-20101,'Invalid.');
سواء الشرط تحقق ام لا

تم التعديل بواسطة egyhamada, 16 April 2006 - 02:34 PM.


#3 m_nasef

m_nasef

    مشترك

  • الأعضــاء
  • 85 مشاركة

تاريخ المشاركة 25 April 2006 - 10:53 PM

هذا التمرين مجرد مثال وليس التمرين الأصلى (فى الكتاب) وهو ....
---------
CREATE OR REPLACE PACKAGE check_pack IS
PROCEDURE chk_dept_job
(p_deptid IN employees.department_id%TYPE,
p_job IN employees.job_id%TYPE);
END check_pack;
--------
CREATE OR REPLACE PACKAGE BODY check_pack
IS
i NUMBER := 0;
CURSOR emp_cur IS
SELECT department_id, job_id
FROM employees;
TYPE emp_table_type IS TABLE OF emp_cur%ROWTYPE
INDEX BY BINARY_INTEGER;
deptid_job emp_table_type;
PROCEDURE chk_dept_job
(p_deptid in employees.department_id%TYPE,
p_job in employees.job_id%TYPE)
IS
BEGIN
FOR k IN deptid_job.FIRST .. deptid_job.LAST LOOP
IF p_deptid = deptid_job(k).department_id
AND p_job = deptid_job(k).job_id THEN
RETURN;
END IF;
END LOOP;
RAISE_APPLICATION_ERROR
(-20500, 'Not a valid job for this dept');
END chk_dept_job;
BEGIN -- one-time-only-procedure
FOR emp_rec IN emp_cur LOOP
deptid_job(i) := emp_rec;
i := i + 1;
END LOOP;
END check_pack;
/
فما تفسير ....وكيف يتحقق الشرط من عدمه مع raise_application_error ...
IF p_deptid = deptid_job(k).department_id
AND p_job = deptid_job(k).job_id THEN
RETURN;
END IF;
END LOOP;
RAISE_APPLICATION_ERROR
(-20500, 'Not a valid job for this dept');
---
وتفسير ان الاجراء الأتى فى النهاية ...
BEGIN -- one-time-only-procedure
FOR emp_rec IN emp_cur LOOP
deptid_job(i) := emp_rec;
i := i + 1;
END LOOP;


#4 m_nasef

m_nasef

    مشترك

  • الأعضــاء
  • 85 مشاركة

تاريخ المشاركة 02 May 2006 - 01:38 PM

فى الباكج السابقة ....
IF p_deptid = deptid_job(k).department_id
AND p_job = deptid_job(k).job_id THEN
RETURN;
END IF;
END LOOP;
RAISE_APPLICATION_ERROR
(-20500, 'Not a valid job for this dept');
---
هل اذا تحققت حالة if سوف ينفذ ...
RAISE_APPLICATION_ERROR
(-20500, 'Not a valid job for this dept');
أم لا ...

#5 hobaa

hobaa

    مشرف سابق وعضو مميز

  • المجموعة الماسية
  • 980 مشاركة

تاريخ المشاركة 10 May 2006 - 12:22 AM

اخى اعتقد ان عندما تريد ارجاع قيمه لبد من تحديد القيمه المرجعه اى
return pl_jop;
على سبيل المثال لانه لبد من رد فعل يحدث عند حدوث حدث معين

ارجوا المعزره لانى لسة خبير فى ال pl sql

ايهاب وجدى


Oracle Developer

Oracle DBA
Oracle Instructor

Egypto-Soft