كيفية القيام NVL (أو فك أو كيس) بيانا خلال الاستعلام ينفورميكس SE SQL؟
سؤال
وIBM واضحة جدا على موقعه ينفورميكس محرك الموحدة، أنه لا يدعم كلا الحالين ولا DECODE. "الرجاء الترقية إلى الإصدار الجديد": <لأ href = "http://www-01.ibm.com/support/docview.wss؟rs=632&context=SSGU5Y&dc=DB560&dc=DB520&uid=swg21189712&loc=en_US&cs=UTF-8&lang= أون وآر إس إس = ct632db2 "يختلط =" نوفولو noreferrer "> http://www-01.ibm.com/support/docview.wss؟rs=632&context=SSGU5Y&dc=DB560&dc=DB520&uid=swg21189712&loc=en_US&cs=UTF-8&lang=en&rss=ct632db2
ووسوف يحدث أبدا!
وهكذا ربما شخص ما يمكن أن يكون فكرة. أريد أن يكون ما يعادل:
<اقتباس فقرة>حدد NVL (C1، C2) من MyTable
اقتباس فقرة>المحلول
CREATE PROCEDURE NVL(a CHAR(32), b CHAR(32) DEFAULT NULL,
c CHAR(32) DEFAULT NULL,
d CHAR(32) DEFAULT NULL,
e CHAR(32) DEFAULT NULL,
f CHAR(32) DEFAULT NULL,
g CHAR(32) DEFAULT NULL)
RETURNING CHAR(32);
IF a IS NOT NULL THEN RETURN a;
ELIF b IS NOT NULL THEN RETURN b;
ELIF c IS NOT NULL THEN RETURN c;
ELIF d IS NOT NULL THEN RETURN d;
ELIF e IS NOT NULL THEN RETURN e;
ELIF f IS NOT NULL THEN RETURN f;
ELSE RETURN g;
END IF;
END PROCEDURE;
وأو - أقل عموما:
-- @(#)$Id: nvl_int.spl,v 1.1 1996/08/26 18:33:11 johnl Exp $
--
-- nvl_integer: return v1 if it is not null else return v2
CREATE PROCEDURE nvl_integer(v1 INTEGER, v2 INTEGER DEFAULT 0)
RETURNING INTEGER;
DEFINE rv INTEGER;
IF v1 IS NOT NULL THEN
LET rv = v1;
ELSE
LET rv = v2;
END IF
RETURN rv;
END PROCEDURE;
والنسخة CHAR يمكن استخدامها في أي نوع تقريبا (باستثناء سلاسل أطول من 32، كما هو مكتوب) لSE هو جيد جدا في تحويل بين أنواع. SE لا يدعم الصب واضح، إما - أنه من الأسلم أن نفترض أن SE ليس لديها الكثير من SQL الماضي SQL-89
نصائح أخرى
إذا كان لديك نظرة على IIUG الموقع في منطقة التحميل، كنت 'ليرة لبنانية العثور على مجموعة من الروتين الاسكتلندي هناك لمحاكاة هذه الوظائف وغيرها. واحد معين كنت بعد هو جمع يسمى "orclproc".