Oracle Query帮助 - 使用TOAD

时间:2009-08-10 14:53:18

标签: sql oracle toad

之前我使用过这种类型的功能,但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;

我想要的是一个标志变量设置为零或一,如果一个显示结果,如果零跳过。这只是一个简单的脚本,可以在一个脚本中包含所有表和select语句,并标记我需要查看结果的脚本。所以,如果我有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

1 个答案:

答案 0 :(得分:1)

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