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

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

صورة
- - - - -

مشكلة في الفانكشن أرجو المساعدة


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

#1 zakiovich

zakiovich

    عضو

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

تاريخ المشاركة 18 May 2010 - 01:04 AM

السلام عليكم أنا أعاني من مشكلة في الفانكشن حيث قمت بعملها على مستوى ENTERPRISE MANAGER حيث استعملت raise_application_error(-20001,'TEXT')، المشكلة عندما استعملها في الفورمز يظهر لي ORA-20001 NON TRAITER أرجو منكم المساعدة

#2 mageed_ahmed

mageed_ahmed

    مشرف قسم الـ DBA

  • فريق الإشراف
  • 956 مشاركة
  • البـلـد: Country Flag
  • الاهتمامات:.

تاريخ المشاركة 18 May 2010 - 10:00 AM

تقدر لو تكرمت ترسل الfunction كاملة؟
("واتقوا يوما ترجعون فيه الي اللــــــه")

#3 zakiovich

zakiovich

    عضو

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

تاريخ المشاركة 18 May 2010 - 02:04 PM

function (m in number, e i date) return is date
select nom into n from personne
where m=mat
exception when others then raise_application_error(-2001,'Cette enregistrement n''existe pas');
end;

#4 mageed_ahmed

mageed_ahmed

    مشرف قسم الـ DBA

  • فريق الإشراف
  • 956 مشاركة
  • البـلـد: Country Flag
  • الاهتمامات:.

تاريخ المشاركة 18 May 2010 - 03:39 PM

function (m in number, e i date) return is date
select nom into n from personne
where m=mat
exception when others then raise_application_error(-2001,'Cette enregistrement n''existe pas');
end;


أخي الحبيب

واضح من الفنكشن انها معموله علي الفورم مش علي الداتا بيز ولا كانت علي قاعدة البيانات كنت كتبت
create function

وبما أنها علي علي الفورم فلا يتأتي معها
exception when others then raise_application_error(-2001,'Cette enregistrement n''existe pas');

وعلي الفورم ممكن
exception when others then message(-2001,'Cette enregistrement n''existe pas');


أما اذا كانت الفنكشن تقصد أنها علي قاعدة البيانات وليس علي الفورم

حاول مره ثانية بتصحيح الكود حيث توجد لديك أخطاء من ضمنها
1- اسم الفنكشن غير موجود
2-المتغير الذي تعرف داخله ايضا غير موجود وهو N
3- انت عامل الفنكشن ترجع تاريخ رغم ان num باين عليه رقم مش تاريخ
4-لم تقم بعمل return للمتغير
5- where m=mat يجب ان تكون where m='mat'

واليك الكود بعد التعديل


Craete or replace function xx
 return number is
n personne.nom%type;
begin
select nom into n from personne
where m='mat';
return(n);
exception when others then raise_application_error(-2001,'Cette enregistrement n''existe pas');
end;

وممكن تطورها بدل where = قيمة ثانته كالتالي

Craete or replace function xx(p_name in varchar2)
 return number is
n personne.nom%type;
begin
select nom into n from personne
where m=p_name;
return(n);
exception 
when others then raise_application_error(-2001,'Cette enregistrement n''existe pas');
end;

مثال اخر

create or replace function Get_emp_name(p_empno emp.empno%type) return varchar2
is
l_ename emp.ename%type;
l_result emp.ename%type;
begin
if p_empno is null Then
raise_application_error(-20001,'لم يتم العثور على رقم الموظف');
end if;
select ename into l_ename
from emp
where empno =p_empno;
return l_ename;
Exception
when others then
raise_application_error(-20001,'Error in get_Emp_name :' || sqlerrm);
end;
بالتوفيق
("واتقوا يوما ترجعون فيه الي اللــــــه")

#5 zakiovich

zakiovich

    عضو

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

تاريخ المشاركة 20 May 2010 - 12:55 AM

بارك الله فيك أخي العزيز سوف أعمل بهذا الكود وسيعمل ان شاء الله وسوف تلقى الرد شكرا