Вопрос

Я использовал этот тип функциональности раньше, но MSSQL не работает с Oracle, есть какие-нибудь советы?

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;

и так далее.Спасибо за помощь в этом, -Phill

РЕДАКТИРОВАТЬ:

Вот что у меня есть:

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 делает.

Объявите переменные курсора на стороне клиента и вернитесь к ним:

Чтобы отобразить курсор в 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