الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

شرط select وإرسال قيمة ل parameter

بدأه sar0o0na في 18 أبريل 2010 · 14 رد · 2,040 مشاهدة · في قسم لغةالاجرائات Pl/sql
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

السلام عليكم ورحمة الله وبركاته

عندي سؤال: كيف أستطيع تحديد بيانات باستخدام select بحيث يكون الشرط كالتالي

مثلا: أذكر الأشخاص اللي عمرهم يكون أقل من 20 ؟؟؟؟؟؟؟؟؟؟؟؟؟

وإذا أردت طباعة عددهم فما هي الطريقة لذلك ؟؟؟؟؟؟؟

علما بأني أستخدم FUNCTION بحيث تستقبل العمر كـ INPUT

وسؤال أخير: عند عمل CALL لهذه FUNCTION فماذا علي أن أرسل لها كـ PARAMETER

هل أحدد عمر معين ؟؟؟؟ مع العلم بأني أريد تحديد الأشخاص اللي عمرهم يكون أقل من 20 !!!؟؟؟؟؟

شاكرة لكم مقدما

programmerssu3.gif
#2

بما انك حددت العمر بتوقع ما في حاجة تعمل متغيير


from table
where age=20
select count(id)

In bad state

#3

شكرا على الرد

لكن الشرط يقول ذو العمر الأقل من 20

ولم يحدد عمر معين

وعندي سؤال بشأن الكود اللي كتبته: ما هي فائدة count التي وضعتها بعد select ؟؟؟؟

programmerssu3.gif
#4

آه عفوا لم انتبه انه اصغر


from table
where age<20
select count(id)

لعرض العدد اي

count تعد


from table
where age <20
select name

لعرض البيانات التي اعمار افرادها اقل من عشرون

ملاحظة عند عمل

count

انصحك بتحديد عمود لانه عند تحديد عمود يكون الاستعلام اسرع من انك تضع

*

In bad state

#5

السلام عليكم ورحمه الله

ممكن تستخدم هذه الطريقة

create procedure age(age_n  number(3))
is
cursor ages_c is select name,age from ages
where age < age_n;
age_t ages_c%rowcount;
begin
open ages_c;
loop
fetch age_t into ages_c;
exit when ages_c%notfound;
dbms_output.put_line(age_t.name||'   '||age_t.age);
end loop;
close ages_c;
end;

طبعا مع تغير بياناتك الخاصة مثل الجدول والحقول

ارجوا الافادة

العلم بين الحياء والكبرياء.

تم تعديل هذه المشاركة بواسطة hisham saad في 18 أبريل 2010 في 22:55

#6

مشكورين على المساعدة

ولكني أستخدم FUNCTION

create FUNCTION age(age_n IN number(3))

هذه الـ FUNCTION تستقبل parameter وهو عبارة عن age

عند عمل function call فعلي إرسال قيمة لها

ماهي القيمة التي علي إرسالها لها ؟؟؟؟ هل أحدد قيمة معينة أم أن هناك طريقة أخرى ؟؟؟ مع العلم بأن الشرط هو age < 20

هذا حلي لـ function call



DECLARE
age number(3) =19;

BEGIN
dbms_output.put_line(age (age));

END;
/

أنا أريد تحديد الأشخاص ذوي الأعمار الأقل من 20 , فكيف أقوم بإرسال قيمة محددة للـ function ؟؟؟؟؟

قد يوجد في الجدول أشخاص اخرين تقل أعمارهم عن 20 وعن العمر الذي قمت بتحديده وإرساله لها

أرجو مساعدتي في هذا مع شرح الحل وإقناعي به

شاكرة لكم تعاونكم

programmerssu3.gif
#7

هل هذه الطريقة صحيحة ؟؟؟ مع العلم بأنني أريد طباعة الـ COUNTER


create or replace Function AGE (age IN number(3))
Return Number (3)
IS
counter Number (3);
BEGIN
SELECT Address, count(*)
FROM TABLE1 AND TABLE2
WHERE age < 4000 AND TABLE1.Address = TABLE2.Address;
Return counter;
END;
/
SET SERVEROUTPUT ON;

وهذه هي الـ CALL


DECLARE
age number(3) =19
;BEGIN
dbms_output.put_line(age (age));
END;
/

programmerssu3.gif
#8

؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟

programmerssu3.gif
#9

خاطئة ..

SET SERVEROUTPUT ON;
create or replace Function AGE (age IN number(3))
Return Number (3)
IS
counter Number (3);
BEGIN 
SELECT count(*) into counter
FROM TABLE1 AND TABLE2
WHERE age < 4000 AND TABLE1.Address = TABLE2.Address;
Return counter;
END;
/
#10

مشكور على الرد

طيب إذا أردت عمل الـ call لها فهل أرسل لها قيمة محددة ؟؟؟؟ أم أنني لا أرسل لها شيئا ؟؟؟؟؟؟؟

أنظر إلى ردي السابق وضعت فيه نموذج للمطلوب لكنني غير مقتنعة به

أريد التذكير بأنني أريد طباعة الـ counter

programmerssu3.gif
#11

طبعاً آنت بحاجة لتمرير قيمة ، فلاتنسي أنك قمتي بتعريفها بالشكل :

create or replace Function AGE (age IN number(3))

على كل حال كما آرى الإستدعاء صحيح ...

#12

بسم الله الرحمن الرحيم

إن شاء الله يكون هذا الحل صحيح

تريدي وظيفة ترسلي اليها قيمة هي رقم وعبارة عن عمر الاشخاص فتعمل الوظيفة في تلقي هذه القيمة وعمل معالجها لها واخراج عدد اعمار الاشخاص الذي عمرهم في مجال قيمة معامل الوظيفة

الي هذه الطريقة انشاء لله :



create or replace function age_counter(age_n number(3))
return number
is
age_c number;
begin
select count(age) into age_c from ages
where age =< age_n
;

return age_c;

end;

والله اعلي واعلم :sleep:

وعند طلب الوظيفة للعمل تعملي هكذا:

set serveroutput on
declare
age_count   number(6);
bgein
age_count := age_counter(20);
dbms_output.put_line(age_count);
end;

وايضا الله اعلي واعلم

العلم بين الحياء والكبرياء

تم تعديل هذه المشاركة بواسطة م. حسام فيصل في 27 أبريل 2010 في 11:19 — السبب: تعديل عبارة الإستعلام بناء على طلب صاحب ال

1
#13

حلك آخي hisham saad خاطئ تماماً و السبب هو إستخدامك لـجملة group by في الإستعلام .... وهذا سيعيد عدد من هم في 19 ، ومن هم في 18 ، ومن هم .....إلخ وسيحدث Exception في إستدعاء الإجرائية بسبب إعادة آكثر من قيمة ....

على فكرة منحتك سمعة +1 بالخطآ !!! :)

#14

السلام عليكم ورحمة الله

اخي العزيز حسام لقد كتبت دالة group by بالخطأ والله مثل ما انت اعطيتني سمعة بالخطأ وانا اعلم ان الدالة من وظائف multirow fuc فأعزرني ونأسف علي خطأ الامر ونشكر خطأ اضافة السمعة

وارجوا من حضرتك ان تعدل علي الكود وازالة دالة الجروب باي حتي يصبح الكود صحيح

ولك جزيل الشكر . :blush:

تم تعديل هذه المشاركة بواسطة hisham saad في 26 أبريل 2010 في 22:10

#15

تم ...........

مواضيع مشابهة