تحويلات NVL لأنواع البيانات المختلفة. بيانات الفرع في وصف أمر SELECT Oracle nvl

لقد تطرقنا إلى الوظائف المتداخلة في وقت سابق، والآن سننظر إليها بمزيد من التفصيل. سننظر أيضًا في وظائف العمل باستخدام القيمة NULL والوظائف التي تساعد في تنفيذ عملية التفرع في الاستعلام.

وظائف متداخلة

تستخدم الوظائف المتداخلة القيمة المرجعة لوظيفة واحدة كمعلمة إدخال لوظيفة أخرى. تقوم الدالات دائمًا بإرجاع قيمة واحدة فقط. لذلك، يمكنك التعامل مع نتيجة استدعاء دالة كقيمة حرفية عند استخدامها كمعلمة لاستدعاء دالة أخرى. يمكن تداخل وظائف السلسلة في أي مستوى تداخل. يبدو استدعاء دالة واحدة هكذا

الوظيفة 1 (المعلمة 1، المعلمة 2، ...) = النتيجة

يمكن أن يؤدي استبدال معلمة دالة باستدعاء دالة أخرى إلى ظهور تعبيرات مثل

F1(param1.1، F2(param2.1، param2.2، F3(param3.1))، param1.3)

يتم تقييم الوظائف المتداخلة أولاً قبل استخدام نتائجها كقيم إدخال لوظائف أخرى. يتم تقييم الوظائف من أعمق مستوى تداخل إلى المستوى الأعلى من اليسار إلى اليمين. يتم تنفيذ التعبير السابق على النحو التالي

  1. يتم تقييم الدالة F3(param1) ويتم استخدام القيمة المرجعة كمعلمة ثالثة للدالة 2، لنسميها param2.3
  2. ثم يتم تقييم الدالة F2(param1, param2.2, param2.3) ويتم استخدام القيمة المرجعة كمعلمة ثانية للدالة F1 - param1.2
  3. وأخيرًا، يتم تقييم الدالة F1(param1, param2, param1.3) ويتم إرجاع النتيجة إلى برنامج الاستدعاء.

وبالتالي، تكون الدالة F3 في مستوى التداخل الثالث.

دعونا ننظر في الطلب

حدد next_day(last_day(sysdate)-7, 'tue') من الثنائي;

  1. هناك ثلاث وظائف في هذا الاستعلام، من المستوى الأدنى إلى المستوى الأعلى - SYSDATE، LAST_DAY، NEXT_DAY. يتم تنفيذ الطلب على النحو التالي
  2. يتم تنفيذ الدالة SYSDATE المتداخلة. يقوم بإرجاع وقت النظام الحالي. لنفترض أن التاريخ الحالي هو 28 أكتوبر 2009
  3. بعد ذلك، يتم حساب نتيجة دالة المستوى الثاني LAST_DAY. LAST_DATE('28-OCT-2009') يُرجع اليوم الأخير من شهر أكتوبر 2009، وهو 31 أكتوبر 2009.
  4. ثم يتم طرح سبعة أيام من هذا التاريخ - فيصبح يوم 24 أكتوبر.
  5. أخيرًا، يتم تقييم الدالة NEXT_DAY('24-OCT-2009', 'tue') ويعرض الاستعلام يوم الثلاثاء الأخير من شهر أكتوبر - وهو في مثالنا 27-OCT-2009.

من الصعب جدًا فهم وبناء التعبيرات المعقدة باستخدام العديد من استدعاءات الوظائف المتداخلة، ولكن هذا يأتي مع الوقت والممارسة. يمكنك تقسيم هذه التعبيرات إلى أجزاء واختبارها بشكل منفصل. يعد الجدول DUAL مفيدًا جدًا لاختبار الاستعلامات ونتائج استدعاء الوظائف. يمكنك اختبار وتصحيح المكونات الصغيرة، والتي يتم دمجها بعد ذلك في تعبير واحد كبير مرغوب.

وظائف المتفرعة

تُستخدم الوظائف الفرعية، المعروفة أيضًا باسم IF-THEN-ELSE، لتحديد مسار التنفيذ اعتمادًا على بعض الظروف. تقوم الدالات المتفرعة بإرجاع نتائج مختلفة بناءً على نتيجة تقييم الحالة. تتضمن مجموعة هذه الوظائف وظائف للعمل مع القيمة NULL: NVL، NVL2، NULLIF وCOALESCE. وكذلك الوظائف المشتركة التي تمثلها الدالة DECODE وتعبير CASE. الدالة DECODE هي إحدى وظائف Oracle، بينما يكون تعبير CASE موجودًا في معيار ANSI SQL.

وظيفة NVL

تختبر الدالة NVL قيمة عمود أو تعبير من أي نوع بيانات مقابل NULL. إذا كانت القيمة NULL، فإنها تُرجع قيمة افتراضية بديلة غير NULL، وإلا فإنها تُرجع القيمة الأصلية.

تحتوي وظيفة NVL على معلمتين مطلوبتين وبناء الجملة هو NVL(original, ifnull) حيث original هي القيمة الأصلية المطلوب التحقق منها وifnull هي النتيجة التي يتم إرجاعها بواسطة الدالة إذا كانت القيمة الأصلية NULL. يجب أن يكون نوع بيانات المعلمات ifnull والأصلية متوافقًا. أي أنه إما أن يكون نوع البيانات هو نفسه أو يجب أن يكون من الممكن تحويل القيم ضمنيًا من نوع إلى آخر. ترجع الدالة NVL قيمة من نفس نوع البيانات مثل نوع بيانات المعلمة الأصلية. دعونا ننظر في ثلاثة استفسارات

الاستعلام 1: حدد nvl(1234) من ثنائي؛

الاستعلام 2: حدد nvl(null, 1234) من ثنائي;

الاستعلام 3: حدد nvl(substr('abc', 4), 'لا توجد سلسلة فرعية') من ثنائي؛

نظرًا لأن وظيفة NVL تتطلب معلمتين، فسيعرض الطلب 1 الخطأ ORA-00909: عدد غير صالح من الوسائط. سيرجع الاستعلام 2 1234 لأنه تم تحديد القيمة NULL وهي فارغة. يستخدم الاستعلام الثالث دالة SUBSTR متداخلة تحاول استخراج الحرف الرابع من سلسلة طويلة مكونة من ثلاثة أحرف، مما يؤدي إلى إرجاع NULL، وتقوم وظيفة NVL بإرجاع السلسلة "لا توجد سلسلة فرعية".

تعد وظيفة NVL مفيدة جدًا عند التعامل مع الأرقام. يتم استخدامه لتحويل القيم NULL إلى 0 بحيث لا ترجع العمليات الحسابية على الأرقام NULL

وظيفة NVL2

توفر الدالة NVL2 وظائف أكثر من NVL، ولكنها تعمل أيضًا على التعامل مع القيم NULL. يقوم باختبار قيمة عمود أو تعبير من أي نوع مقابل NULL. إذا لم تكن القيمة NULL، فسيتم إرجاع المعلمة الثانية، وإلا يتم إرجاع المعلمة الثالثة، على عكس وظيفة NVL، والتي في هذه الحالة ترجع القيمة الأصلية.

تحتوي الدالة NVL2 على ثلاث معلمات مطلوبة وصياغة الجملة هي NVL2(original, ifnotnull, ifnull)، حيث original هي القيمة التي يتم اختبارها، وifnotnull هي القيمة التي يتم إرجاعها إذا كانت original ليست فارغة، وifnull هي القيمة التي يتم إرجاعها إذا كانت original هي NULL. يجب أن تكون أنواع البيانات الخاصة بمعلمتي ifnotnull وifnull متوافقة، ولا يمكن أن تكون من النوع LONG. نوع البيانات الذي يتم إرجاعه بواسطة الدالة NVL2 يساوي نوع بيانات المعلمة ifnotnull. دعونا نلقي نظرة على بعض الأمثلة

الاستعلام 1: حدد nvl2(1234, 1, 'a string') من ثنائي؛

الاستعلام 2: حدد nvl2(null, 1234, 5678) من ثنائي;

الاستعلام 3: حدد nvl2(substr('abc', 2), 'Not bc', 'No substring') من ثنائي؛

المعلمة ifnotnull في الطلب 1 هي رقم، والمعلمة ifnull عبارة عن سلسلة. نظرًا لأن أنواع البيانات غير متوافقة، يتم إرجاع الخطأ "ORA-01722: رقم غير صالح". يقوم الاستعلام الثاني بإرجاع المعلمة ifnull، حيث أن الأصل هو NULL وستكون النتيجة 5678. يستخدم الاستعلام الثالث الدالة SUBSTR التي ترجع 'bc' وتستدعي NVL2('bc','Not bc','No substring') - والتي ترجع المعلمة ifnotnull – "ليس قبل الميلاد".

دالة NULLIF

تتحقق الدالة NULLIF مما إذا كانت القيمتان متطابقتين. إذا كانت هي نفسها، يتم إرجاع NULL، وإلا يتم إرجاع المعلمة الأولى. تحتوي الدالة NULLIF على معلمتين مطلوبتين وبناء الجملة هو NULLIF(ifunequal, Compare_item). تقارن الدالة بين معلمتين، وإذا كانتا متطابقتين، فسيتم إرجاع NULL، وإلا فإن المعلمة غير متساوية. دعونا ننظر في الطلبات

الاستعلام 1: حدد nullif(1234, 1234) من ثنائي؛

الاستعلام الأول يُرجع NULL نظرًا لأن المعلمات متطابقة. لا يتم تحويل السلاسل الموجودة في الاستعلام 2 إلى تاريخ، ولكن يتم مقارنتها كسلاسل. وبما أن السلاسل ذات أطوال مختلفة، فسيتم إرجاع المعلمة ifunequal في 24 يوليو 2009.

في الشكل 10-4، تم دمج الدالة NULLIF داخل الدالة NVL2. تستخدم الدالة NULLIF بدورها الدالتين SUBSTR وUPPER كجزء من تعبير في المعلمة ifunequal. تتم مقارنة عمود البريد الإلكتروني بهذا التعبير، والذي يُرجع الحرف الأول من الاسم الأول مدمجًا مع الاسم الأخير للموظفين الذين يبلغ طول اسمهم الأول 4 أحرف. عندما تكون هذه القيم متساوية، ستُرجع NULLIF NULL، وإلا فإنها ستُرجع قيمة المعلمة ifunequal. يتم استخدام هذه القيم كمعلمة لوظيفة NVL2. يقوم NVL2 بدوره بإرجاع وصف لما إذا كانت العناصر المقارنة متطابقة أم لا.

الشكل 10-4 - استخدام الدالة NULLIF

وظيفة التئام

ترجع الدالة COALESCE أول قيمة غير فارغة من قائمة المعلمات. إذا كانت كافة المعلمات فارغة، فسيتم إرجاع NULL. تحتوي الدالة COALESCE على معلمتين مطلوبتين وأي عدد من المعلمات الاختيارية ويكون بناء الجملة هو COALESCE(expr1, expr2, ..., exprn) حيث ستكون النتيجة expr1 إذا لم تكن قيمة expr 1 فارغة، وإلا ستكون النتيجة expr2 إذا لم يكن فارغًا، وما إلى ذلك. COALESCE يساوي في المعنى وظائف NVL المتداخلة

التحام (expr1، expr2) = NVL (expr1، expr2)

التئام(expr1, expr2, expr3) = NVL(expr1,NVL(expr2, expr3))

نوع بيانات القيمة التي تم إرجاعها إذا تم العثور على قيمة غير فارغة يساوي نوع بيانات القيمة غير الفارغة الأولى. لتجنب الخطأ "ORA-00932: أنواع بيانات غير متناسقة"، يجب أن تكون جميع المعلمات غير NULL متوافقة مع المعلمة الأولى غير NULL. دعونا ننظر إلى ثلاثة أمثلة

الاستعلام 1: حدد الاندماج (فارغ، خالي، خالي، 'سلسلة') من ثنائي؛

الاستعلام 2: حدد الاندماج (فارغ، فارغ، فارغ) من ثنائي؛

الاستعلام 3: حدد الدمج (substr('abc', 4), 'Not bc', 'No substring') من ثنائي؛

يقوم الاستعلام 1 بإرجاع المعلمة الرابعة: سلسلة، نظرًا لأنها المعلمة الأولى غير NULL. يقوم الاستعلام الثاني بإرجاع NULL لأن كافة المعلمات فارغة. يقوم الاستعلام 3 بتقييم المعلمة الأولى، والحصول على القيمة NULL، وإرجاع المعلمة الثانية نظرًا لأنها المعلمة الأولى غير NULL.

قد تكون معلمات وظيفة NVL2 مربكة إذا كنت معتادًا على وظيفة NVL. NVL(original, ifnull) تُرجع القيمة الأصلية إذا لم تكن القيمة NULL، وإلا ifnull. NVL2(original, ifnotnull, ifnull) يُرجع ifnotnull إذا لم يكن الأصلي NULL وإلا ifnull. يأتي الارتباك من حقيقة أن المعلمة الثانية لوظيفة NVL هي ifnull، في حين أن الدالة NVL2 هي ifnotnull. لذلك لا تعتمد على موضع المعلمة في الوظيفة.

وظيفة فك التشفير

تطبق الدالة DECODE منطق if-then-else عن طريق اختبار المعلمتين الأوليين للمساواة وإرجاع قيمة ثالثة إذا كانتا متساويتين أو قيمة مختلفة إذا لم تكونا متساويتين. تحتوي الدالة DECODE على ثلاث معلمات مطلوبة ويكون بناء الجملة هو DECODE(expr1, comp1, iftrue1, , ). يتم استخدام هذه المعلمات كما هو موضح في مثال الكود الكاذب التالي

إذا expr1 = comp1 ثم قم بإرجاع iftrue1

وإلا إذا كانت expr1=comp2، فارجع iftrue2

وإلا، إذا كانت exprN=compN، فارجع iftrueN

وإلا قم بإرجاع NULL|iffalse;

أولاً، تتم مقارنة expr1 مع comp1. إذا كانت متساوية، يتم إرجاع iftrue1. إذا كانت expr1 لا تساوي comp1، فإن ما يحدث بعد ذلك يعتمد على ما إذا تم تحديد المعلمات comp2 وiftrue2. إذا تم تقديمها، تتم مقارنة قيمة expr1 مع comp2. إذا كانت القيم متساوية، فسيتم إرجاع iftrue2. إذا لم يكن الأمر كذلك، إذا كان هناك أزواج من المعلمات compN، وiftrueN، وexpr1، وcompN، فسيتم مقارنتها، وإذا كانت متساوية، فسيتم إرجاع iftrueN. إذا لم يتم العثور على أي تطابق في أي مجموعة من المعلمات، فإما إذا تم تحديد هذه المعلمة، أو يتم إرجاع NULL.

يمكن أن تكون كافة المعلمات الموجودة في الدالة DECODE عبارة عن تعبيرات. نوع القيمة المرجعة يساوي نوع عنصر التحقق الأول - المعلمةشركات 1. التعبير اكسبر يتم تحويل 1 ضمنيًا إلى نوع بيانات معلمة comp1. جميع معلمات الشركات الأخرى المتاحة 1... شركات ن يتم أيضًا تحويلها ضمنيًا إلى نوع شركات 1. يعامل DECODE القيمة NULL على أنها مساوية لقيمة NULL أخرى، أي. إذا كانت قيمة expr1 NULL وcomp3 NULL وcomp2 ليست NULL، فسيتم إرجاع iftrue3. دعونا نلقي نظرة على بعض الأمثلة

الاستعلام 1: حدد فك التشفير (1234، 123، '123 مطابق') من ثنائي؛

الاستعلام 2: حدد فك التشفير (1234، 123، '123 مطابق'، 'لا يوجد تطابق') من ثنائي؛

الاستعلام 3: حدد فك التشفير ('search'، 'comp1'، 'true1'، 'comp2'، 'true2'، 'search'، 'true3'، substr('2search'، 2، 6)، 'true4'، ' false') من ثنائي؛

يقارن الاستعلام الأول بين القيمة 1234 و123. وبما أنهما غير متساويتين، فسيتم تجاهل iftrue1 وبما أن القيمة iffalse لم يتم تعريفها، فسيتم إرجاع NULL. الطلب الثاني مطابق للطلب 1 فيما عدا أنه تم تحديد القيمة iffalse. بما أن 1234 لا يساوي 123، فإنها تُرجع قيمة غير صحيحة - "لا يوجد تطابق". يقوم الاستعلام الثالث بالتحقق من قيم المعلمات لمطابقة قيمة البحث. المعلمات comp1 وcomp2 لا تساوي "بحث" لذلك يتم تخطي نتائج iftrue1 وiftrue2. تم العثور على تطابق في عملية المقارنة الثالثة للعنصر comp3 (موضع المعلمة 6) وتم إرجاع قيمة iftrue3 (المعلمة 7) والتي تساوي 'true3'. منذ العثور على تطابق، لم يتم إجراء أي حسابات أخرى. أي أنه على الرغم من أن قيمة comp4 (المعلمة 8) تتطابق أيضًا مع expr1، إلا أنه لم يتم حساب هذا التعبير أبدًا حيث تم العثور على التطابق في المقارنة السابقة.

تعبير الحالة

تنفذ جميع لغات البرمجة من الجيل الثالث والرابع بناء الحالة. مثل الدالة DECODE، يسمح لك تعبير CASE بتنفيذ منطق if-then-else. هناك خياران لاستخدام تعبير CASE. يقوم تعبير CASE البسيط بإعداد العنصر المصدر للمقارنة مرة واحدة ثم يسرد جميع شروط الاختبار الضرورية. تقوم حالة معقدة (يتم البحث عنها) بتقييم كلا العبارتين لكل حالة.

يحتوي تعبير CASE على ثلاث معلمات مطلوبة. يعتمد بناء جملة التعبير على النوع. للحصول على تعبير حالة بسيط يبدو مثل هذا

حالة البحث_expr

عند المقارنة_expr1 ثم iftrue1

)

ترجع الدالة TRUNC الرقم n، مقطوعًا إلى منازل عشرية m. قد لا يتم تحديد المعلمة m؛ في هذه الحالة، يتم اقتطاع n إلى عدد صحيح.

حدد TRUNC(100.25678) X1، TRUNC(-100.25678) X2، TRUNC(100.99) X3،

ترونك(100.25678, 2)X4

من المزدوج

علامة الوظيفة (ن)

تحدد الدالة SIGN علامة الرقم. إذا كانت n موجبة، فإن الدالة ترجع 1. وإذا كانت n سالبة، فإنها ترجع -1. إذا كانت تساوي الصفر، فسيتم إرجاع 0. على سبيل المثال:

حدد الإشارة (100.22) X1، الإشارة (-100.22) X2، الإشارة (0) X3

من المزدوج

الميزة المثيرة للاهتمام لهذه الوظيفة هي القدرة على إرسال m يساوي صفر دون التسبب في خطأ القسمة على 0.

وظيفة الطاقة (ن، م)

تقوم الدالة POWER برفع الرقم n إلى الأس m. يمكن أن تكون الدرجة كسرية وسلبية، مما يوسع بشكل كبير قدرات هذه الوظيفة.

حدد الطاقة (10، 2) X1، الطاقة (100، 1/2) X2،

الطاقة (1000، 1/3) X3، الطاقة (1000، -1/3) X4

من المزدوج

X1 X2 X3 X4
100 10 10 0,1

في بعض الحالات، قد يحدث استثناء عند استدعاء هذه الوظيفة. على سبيل المثال:

حدد الطاقة (-100، 1/2) X2

من المزدوج

في هذه الحالة، تتم محاولة لحساب الجذر التربيعي لعدد سالب، مما سيؤدي إلى ظهور خطأ ORA-01428 "الوسيطة خارج النطاق".

الدالة SQRT(ن)

هذه الوظيفةإرجاع الجذر التربيعي لـ n. على سبيل المثال:

حدد SQRT(100)X

من المزدوج

وظائف EXP(n) وLN(n).

تقوم الدالة EXP برفع e إلى الأس n، وتقوم الدالة LN بحساب اللوغاريتم الطبيعي لـ n (يجب أن يكون n أكبر من الصفر). مثال:

حدد EXP(2) X1، LN(1) X2، LN(EXP(2)) X3

وظيفة NVL

يتم استخدام وظيفة NVL بشكل عام في أغلب الأحيان. تستقبل الدالة معلمتين: NVL(expr1, expr2). إذا لم تكن المعلمة الأولى expr1 فارغة، فستُرجع الدالة قيمتها. إذا كانت المعلمة الأولى فارغة، فسترجع الدالة قيمة المعلمة الثانية expr2 بدلاً من ذلك.

دعونا نلقي نظرة على مثال عملي. يمكن أن يحتوي حقل COMM في جدول EMP على قيم فارغة. عند تنفيذ استعلام مثل:

حدد EMPNO، ENAME، COMM، NVL(COMM، 0) NVL_COMM

من سكوت.EMP

سيتم استبدال القيمة NULL بالصفر. لاحظ أنه عند إنشاء قيمة باستخدام دالة، يتم تعيين اسم مستعار لها. ستبدو نتائج الاستعلام كما يلي:

إمبنو اسم إتصالات NVL_COMM
7369 حداد 0
7499 ألين 300 300
7521 جناح 500 500
7566 جونز 0
7654 مارتن 1400 1400
7698 بليك 0
7782 كلارك 0
7839 ملِك 0
7844 تيرنر 0 0
7900 جوامع 0
7902 معقل 0
7934 ميلر 0

الدالة CEIL(n)

ترجع الدالة CEIL أصغر عدد صحيح أكبر من أو يساوي الرقم n الذي تم تمريره كمعلمة. على سبيل المثال:

حدد CEIL(100) X1، CEIL(-100) X2، CEIL(100.2) X3، CEIL(-100.2) X4

من المزدوج

الدالة TRUNC(n [,m])

ترجع الدالة TRUNC الرقم n، مقطوعًا إلى منازل عشرية m. قد لا يتم تحديد المعلمة m؛ في هذه الحالة، يتم اقتطاع n إلى عدد صحيح.

حدد TRUNC(100.25678) X1، TRUNC(-100.25678) X2، TRUNC(100.99) X3،

ترونك(100.25678, 2)X4

من المزدوج

علامة الوظيفة (ن)

تحدد الدالة SIGN علامة الرقم. إذا كانت n موجبة، فإن الدالة ترجع 1. وإذا كانت n سالبة، فإنها ترجع -1. إذا كانت تساوي الصفر، فسيتم إرجاع 0. على سبيل المثال:

حدد الإشارة (100.22) X1، الإشارة (-100.22) X2، الإشارة (0) X3

من المزدوج

الميزة المثيرة للاهتمام لهذه الوظيفة هي القدرة على إرسال m يساوي صفر دون التسبب في خطأ القسمة على 0.

وظيفة الطاقة (ن، م)

تقوم الدالة POWER برفع الرقم n إلى الأس m. يمكن أن تكون الدرجة كسرية وسلبية، مما يوسع بشكل كبير قدرات هذه الوظيفة.

حدد الطاقة (10، 2) X1، الطاقة (100، 1/2) X2،

الطاقة (1000، 1/3) X3، الطاقة (1000، -1/3) X4

من المزدوج

X1 X2 X3 X4
100 10 10 0,1

في بعض الحالات، قد يحدث استثناء عند استدعاء هذه الوظيفة. على سبيل المثال:

حدد الطاقة (-100، 1/2) X2

من المزدوج

في هذه الحالة، تتم محاولة لحساب الجذر التربيعي لعدد سالب، مما سيؤدي إلى ظهور خطأ ORA-01428 "الوسيطة خارج النطاق".

الدالة SQRT(ن)

ترجع هذه الدالة الجذر التربيعي للرقم n. على سبيل المثال:

حدد SQRT(100)X

من المزدوج

وظائف EXP(n) وLN(n).

تقوم الدالة EXP برفع e إلى الأس n، وتقوم الدالة LN بحساب اللوغاريتم الطبيعي لـ n (يجب أن يكون n أكبر من الصفر). مثال:

حدد EXP(2) X1، LN(1) X2، LN(EXP(2)) X3

وظيفة TO_CHAR مع الأرقام

وظائف لتحويل البيانات إلى أنواع بيانات أخرى. TO_CHAR(رقم) يحول الرقم إلى نص. TO_NUMBER(سلسلة) تحول النص إلى رقم.

SELECT TO_CHAR (123) FROM DUAL سيُرجع السلسلة 123، SELECT TO_NUMBER (`12345") FROM DUAL سيُرجع الرقم 12345.

العمل المختبري. تغيير تنسيق رقم الإخراج

التغييرات في تنسيق القيم الرقمية في Oracle SQL، وظيفة TO_CHAR للعمل مع القيم الرقمية.

يمارس:

اكتب استعلامًا يعرض معلومات حول الاسم الأول واسم العائلة وراتب الموظفين من جدول hr.employees بالتنسيق الموضح في الشكل. 3.4-1:

أرز. 3.4 -1

وفي هذه الحالة، يجب فرز البيانات بحيث يتم عرض صفوف الموظفين ذوي الراتب الأعلى أولاً.

ملحوظة:

بعض قيم الرواتب في الشكل. تم تعديل 3.4-1، لذا قد لا تكون نفس قيمك.

حل:

حدد first_name كـ "الاسم الأول"، وlast_name كـ "اسم العائلة"، وTO_CHAR (SALARY، "L999999999.99") كـ "Salary" من hr.employees ORDER BY SALARY DESC.

الدالتان TO_NUMBER وTO_DATE

دالة لتحويل سلسلة إلى تاريخ TO_DATE (سلسلة، تنسيق). لقد تمت بالفعل مناقشة قيم التنسيق المحتملة أعلاه، لذلك سأقدم عدة أمثلة لاستخدام هذه الوظيفة. أمثلة:

يختار TO_DATE("01/01/2010"، `DD.MM.YYYY") منسوف تقوم DUAL بإرجاع التاريخ `01/01/2010";

يختار TO_DATE("01.JAN.2010"، `DD.MON.YYYY") منسوف تقوم DUAL بإرجاع التاريخ `01/01/2009";

يختار TO_DATE("15-01-10"، `DD-MM-YY") منسوف تقوم DUAL بإرجاع التاريخ `01/15/2010".

دالة لتحويل سلسلة إلى قيمة رقمية TO_NUMBER (سلسلة، تنسيق). يتم سرد قيم التنسيق الأكثر شيوعًا في الجدول، لذلك دعونا نلقي نظرة على استخدام هذه الوظيفة باستخدام الأمثلة. أمثلة:

يختار TO_NUMBER(`100") منستعيد DUAL الرقم 100 SELECT TO_NUMBER (`0010.01"، "9999D99") منسوف تقوم DUAL بإرجاع الرقم 10.01؛

يختار TO_NUMBER("500,000"، "999G999") منسوف تقوم DUAL بإرجاع الرقم 500000.

عنصر RR بتنسيق التاريخ

يشبه عنصر تنسيق التاريخ والوقت RR عنصر تنسيق التاريخ والوقت YY، ولكنه يوفر مرونة إضافية لتخزين قيم التاريخ في قرون أخرى. يسمح عنصر تنسيق التاريخ والوقت RR بتخزين تواريخ القرن العشرين في القرن الحادي والعشرين عن طريق تحديد آخر رقمين فقط من السنة.

إذا كان آخر رقمين من السنة الحالية من 00 إلى 49، فإن السنة التي تم إرجاعها لها نفس الرقمين الأولين مثل السنة الحالية.

إذا كان آخر رقمين من السنة الحالية يتراوح بين 50 إلى 99، فإن أول رقمين من السنة التي تم إرجاعها أكبر بمقدار 1 من أول رقمين من السنة الحالية.

إذا كان آخر رقمين من السنة الحالية من 00 إلى 49، فإن أول رقمين من السنة التي تم إرجاعها أقل بمقدار 1 من أول رقمين من السنة الحالية.

إذا كان آخر رقمين من السنة الحالية يتراوح بين 50 إلى 99، فإن السنة التي تم إرجاعها لها نفس الرقمين الأولين مثل السنة الحالية.

وظيفة NVL

يتم استخدام وظيفة NVL بشكل عام في أغلب الأحيان. تستقبل الدالة معلمتين: NVL (expr1، expr2). إذا لم تكن المعلمة الأولى expr1 فارغة، فستُرجع الدالة قيمتها. إذا كانت المعلمة الأولى فارغة، فسترجع الدالة قيمة المعلمة الثانية expr2 بدلاً من ذلك.

مثال: حدد NVL (supplier_city, n/a") من الموردين:

ستُرجع عبارة SQL أعلاه n/" إذا كان حقل "مدينة_المورد" يحتوي على قيمة فارغة. وإلا، فسوف تُرجع قيمة "مدينة_المورد".

مثال آخر لاستخدام وظيفة NVL في Oracle/PLSQL هو:

حدد المورد_id، NVL (supplier_desc، المورد_اسم) من الموردين.

سوف يعود بيان SQL هذا اسم الموردالحقل إذا المورد_ديسكيحتوي على قيمة فارغة. وإلا فإنه سيعود المورد_ديسك.

المثال الأخير: استخدام وظيفة NVL في Oracle/PLSQL هو: حدد NVL(commission, 0) from sales;

أعاد بيان SQL هذا القيمة 0 إذا عمولةيحتوي الحقل على قيمة فارغة. وإلا فسيتم إعادته اللجانمجال.

تحويلات NVL لأنواع البيانات المختلفة

لتحويل قيمة فارغة إلى قيمة فعلية، استخدم الدالة NVL: نفل ( التعبير 1، التعبير 2), أين:

التعبير1-القيمة الأصلية أو المحسوبة، والتي قد تكون غير محددة.

التعبير2- القيمة التي يتم استبدالها بالقيمة غير المحددة.

ملحوظة:يمكن استخدام الدالة NVL لتحويل أي نوع بيانات، ولكن النتيجة ستكون دائمًا نفس النوع التعبير1.

تحويل NVL لـ أنواع مختلفة:

الرقم - NVL (عمود رقمي، 9).

شار أو VARCHAR2 - NVL (الأحرف|العمود،"غير متاح").

العمل المختبري. باستخدام وظيفة NVL

وظيفة NVL للعمل مع القيم الخالية في Oracle SQL.

يمارس:

اكتب استعلامًا يعرض معلومات الاسم الأول والأخير للموظف من الجدول hr.employees.، بالإضافة إلى معدل العمولة (عمود COMMISSION_PCT) للموظف. وفي هذه الحالة بالنسبة للموظفين الذين لم يتم تحديد العمولة لهم يجب أن تظهر القيمة 0. ويجب أن تكون نتيجة الطلب كما هو موضح في الشكل. 3.5-1.

أرز. 3.5 -1 (القيم تظهر ابتداءً من السطر 51)

حل:

يمكن أن يكون رمز الطلب المقابل كما يلي:

حدد الاسم الأول كـ "الاسم الأول"، واسم العائلة كـ "اسم العائلة"، وNVL (COMMISSION_PCT، 0) كـ "سعر العمولة" من hr.employees.




قمة