بتاريخ: 5 أغسطس 200817 سنة comment_135082 انا عندي مشكلة وهي ان حقل من التقرير يحتوي على رقم ...وانا اريد ان اعرض بدلا عن الرقم شي اخر ..وعل شان تكون الفكرة واضحة خذو هذي الملاحضات :ان الرقم واحد اريدة يظهر "رئيسا" ً...والرقم اثنان يظهر " نائباً" ولكن هذا "رئيسا ونائبا" ليست مخزنة لي ليست داتا في القاعدةولكم جزيل الشكر تقديم بلاغ
بتاريخ: 5 أغسطس 200817 سنة comment_135189 بامكانك عمل فنكشن يستقبل الرقم و يعيد الاسم و اجعله مكان الرقم في التقريران لم تتضح الفكرة اعلمنا تحياتي تقديم بلاغ
بتاريخ: 6 أغسطس 200817 سنة comment_135205 نفرض أن لدينا الجدول التالي : CREATE TABLE EMPLOYEE ( EMPLOYEE_NO NUMBER(5), EMPLOYEE_NAME VARCHAR2(30), EMPLOYEE_CPUBLIC NUMBER(1), CONSTRAINT PK_EMPLOYEE PRIMARY KEY(EMPLOYEE_NO), CONSTRAINT CHK_EMPLOYEE_CPUBLIC CHECK(EMPLOYEE_CPUBLIC IN(1,2,3,4)) ) / لاحظ أن هناك حقل يدعي EMPLOYEE_CPUBLIC والتي تمثل الحالة الإجتماعية ... وهذا يأخذ قيمة من أربعة بحيث أن تكون القيم مرتبة كما يلي :1- أعزب 2- متزوج 3- أرمل 4- مطلق1- إستخدام الشرط CASE : SELECT EMPLOYEE_NO, EMPLOYEE_NAME, (CASE EMPLOYEE_CPUBLIC WHEN 1 THEN 'أعزب' WHEN 2 THEN 'متزوج' WHEN 3 THEN 'أرمل' ELSE 'مطلق' END) AS EMPLOYEE_CPUBLIC FROM EMPLOYEE 2- بناء FUNCTION خاص : CREATE OR REPLACE FUNCTION FUN_CPUBLIC(IN_CPUBLIC IN NUMBER) RETURN VARCHAR2 AS ID_RETURN VARCHAR2(15); BEGIN IF(IN_CPUBLIC = 1)THEN ID_RETURN := 'أعزب'; ELSIF(IN_CPUBLIC = 2)THEN ID_RETURN := 'متزوج'; ELSIF(IN_CPUBLIC = 3)THEN ID_RETURN := 'أرمل'; ELSIF(IN_CPUBLIC = 4)THEN ID_RETURN := 'مطلق'; ELSE ID_RETURN := ''; END IF; RETURN ID_RETURN; END; / ومن ثم إستدعاء الغرض كما يلي : SELECT EMPLOYEE_NO, EMPLOYEE_NAME, FUN_CPUBLIC(EMPLOYEE_CPUBLIC) AS EMPLOYEE_CPUBLIC FROM EMPLOYEE بالتوفيق تقديم بلاغ
بتاريخ: 6 أغسطس 200817 سنة comment_135228 الاخ الكريمممكن تستخدم الدالة decodedecode(1,'hassa',2,'ssddd') تقديم بلاغ
بتاريخ: 6 أغسطس 200817 سنة comment_135246 شكراً لكل المشاركينمجهود المهندسMMA جميل ومقدر(استاذنا)لكن اظن الدالة decode في select statment مباشرة وسهلة الاستخدام ولاتحتاج لقيد اضافي تقديم بلاغ
بتاريخ: 6 أغسطس 200817 سنة comment_135291 الدالة DeCode لا تستخدم إلا في الشروط الخفيفة ... يعني لو كان مساوي القيم ينفذ الأمر ... ولو كان غير مساوي لا ينفذ الأمر ... ولا يحتوي سوي علي إشارة واحدة وهي ( = ) ... أنظر الكود التالي : If(X = 1)Then <Exceptions> ElsIf(X = 2)Then <Exceptions> ElsIf(X = 3)Then <Exceptions> ElsIf(X = 4)Then <Exceptions> End If; فإستخداماتها محدودة جداًأما Case When فإستخداماتها أوسع عن الـ DeCode ... حيث يمكننا إستخدام كل أنواع إشارات المقارنة : =, >, <, >=, <=, <>, != أما بخصوص بناء جمل الـ PL/SQL في مخزن الـ Functions دة بيكون أوسع بكثير ومرن عن التركيبة Case When وعن الدالة DeCode ... فمثلاً لو أحببنا نجلب عدد الأيام الفعلية للشهر الذي علي أساسة سيحاسب علية كل موظف ... فهنا من المفضل إستخدام الـ Function لأننا في هذه الحالة سنستخدم أكثر من إستعلام :عدد الأيام الفعلية = عدد أيام الشهر الفعلي - ( أيام أجازات الطلب + الراحة الأسبوعية + العطلة الرسمية ).عموماً الدالة DeCode لا تستخدم سوي إشارة مقارنة واحدة ( = ) ... وهي جيدة جداً في الشرط البسيط مثل نوع الموظف والحالة الإجتماعية والديانة و ....... الي آخرة : DeCode(Employee_CPublic,1,'أعزب',2,متزوج'',3,أرمل'',4,'مطلق'); بالتوفيق تقديم بلاغ
بتاريخ: 6 أغسطس 200817 سنة comment_135292 الاخ الكريمنفعك الله بعلمك .ووفقك لما يحب ويرضي.مشكور.... تقديم بلاغ
انضم إلى المناقشة
يمكنك المشاركة الآن والتسجيل لاحقاً. إذا كان لديك حساب, سجل دخولك الآن لتقوم بالمشاركة من خلال حسابك.