سؤال

لقد استخدمت هذا النوع من الوظائف من قبل ولكن MSSQL ولكن لا يمكنني الحصول عليه للعمل لأوراكل أو أي نصائح؟

DECLARE
    MY_TBL NUMBER := 1;

BEGIN

    IF(MY_TBL > 0) THEN
        SELECT * FROM MY_TBL ORDER BY MY_TBL_ID DESC;
    END IF;
END;

ما أود الحصول عليه هو مجموعة متغير العلم إلى الصفر أو واحد، إذا عرض المرء النتائج، إذا تخطي الصفر. هذا مجرد برنامج نصي بسيط للحصول على جميع الجداول الخاصة بي وحدد العبارات في برنامج نصي واحد. لذلك إذا كان لدي 5 طاولات أود استخدام وظيفة ELSIF لإضافة أكثر مثل هذا

DECLARE
    MY_TBL1 NUMBER := 1;
    MY_TBL2 NUMBER := 1;

BEGIN

    IF(MY_TBL1 > 0) THEN
        SELECT * FROM MY_TBL1 ORDER BY MY_TBL1_ID DESC;
    ELSIF(MY_TBL2 > 0) THEN
        SELECT * FROM MY_TBL2 ORDER BY MY_TBL2_ID DESC;
    END IF;
END;

وما إلى ذلك وهلم جرا. شكرا لأي مساعدة في هذا، -

تعديل:

هنا ما لدي:

VAR result_set REFCURSOR

DECLARE
   my_tbl_1 NUMBER := 1;
   my_tbl_2 NUMBER := 0;
   my_tbl_3 NUMBER := 0;
BEGIN
   IF (my_tbl_1 > 0)
   THEN
      BEGIN
         OPEN :result_set FOR
            SELECT   *
                FROM my_tbl_1
            ORDER BY my_tbl_1_id DESC;
      END;
   ELSIF (my_tbl_2 > 0)
   THEN
      BEGIN
         OPEN :result_set FOR
            SELECT   *
                FROM my_tbl_2
            ORDER BY my_tbl_2_id DESC;
      END;
   ELSIF (my_tbl_3 > 0)
   THEN
      BEGIN
         OPEN :result_set FOR
            SELECT   *
                FROM my_tbl_3
            ORDER BY my_tbl_3_id DESC;
      END;
   END IF;
END;

PRINT result_set
هل كانت مفيدة؟

المحلول

Oracle لا يمكن إرجاع النتائج من إجراء مخزن كما SQL Server هل.

يعلن متغيرات المؤشر الجانبية Cliend والعودة إليهم:

لعرض المؤشر في SQL*Plus:

VAR cur1 REFCURSOR

DECLARE
        MY_TBL1 NUMBER := 1;
        MY_TBL2 NUMBER := 1;

BEGIN
        IF(MY_TBL1 > 0) THEN
        BEGIN
                OPEN :cur1
                FOR
                SELECT  *
                FROM    MY_TBL1
                ORDER BY
                        MY_TBL1_ID DESC;
        END;
        ELSIF (MY_TBL2 > 0) THEN
        BEGIN
                OPEN :cur1
                FOR
                SELECT  *
                FROM    MY_TBL2
                ORDER   BY
                        MY_TBL2_ID DESC;
        END;
        END IF;
END;
/

PRINT cur
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top