如何通过传递手动参数值使用 Toad 查看 ORACLE 中 SQL 函数的输出

How to see the output of the SQL function in ORACLE using Toad by passing manual parameter values

我是 Oracle 数据库和 TOAD 的新手。我需要在 TOAD 中 运行 这个函数 GET_WRKFLW_LICENSE_LIMIT 并查看它的输出。

参数值为:

GET_WRKFLW_LICENSE_LIMIT('MSG_FORMAT', 1, NULL, NULL)

在下面附上我的代码。

CREATE OR REPLACE FUNCTION MYSCHEMA.GET_WRKFLW_LICENSE_LIMIT (
   WRK_TYPE IN VARCHAR2, VCLIENT_ID IN NUMBER, VCP_ID IN NUMBER, VREQ_TYPE  IN VARCHAR2)
   RETURN BOOLEAN
 IS
   RESULT                   BOOLEAN;
   vWRK_FLW_LIST_COUNT      NUMBER (5);
   vWRK_FLW_LICENCE_LIMIT   NUMBER (5);
 BEGIN
      IF (WRK_TYPE = 'MSG_FORMAT') THEN
      SELECT COUNT (*)
        INTO vWRK_FLW_LIST_COUNT
        FROM (SELECT MSG_TMPL_ID
                FROM MYSCHEMA.VW_MSG_TMPL_FORMAT
               WHERE     NVL (CLIENT_ID, 1) = NVL (VCLIENT_ID, 1)
                     AND NVL (CP_ID, 1) = NVL (VCP_ID, 1));
      BEGIN
         SELECT TO_NUMBER (PARAM_VALUE)
           INTO vWRK_FLW_LICENCE_LIMIT
           FROM CONFIG.ENV_PARAMS
           WHERE PARAM_NAME = 'TT_MSG_TMPL_THRESHOLD';
         IF     vWRK_FLW_LICENCE_LIMIT IS NOT NULL
            AND (vWRK_FLW_LIST_COUNT <= vWRK_FLW_LICENCE_LIMIT) THEN
            RESULT := TRUE;
         ELSIF vWRK_FLW_LICENCE_LIMIT IS NULL THEN
            RESULT := TRUE;
         ELSE
            RESULT := FALSE;
         END IF;
      EXCEPTION
         WHEN OTHERS  THEN
            RESULT := FALSE;
            RETURN RESULT;
    END;
    EXCEPTION
        WHEN OTHERS THEN
           RESULT := FALSE;
            RETURN RESULT;
    END;
    /

你的函数有两个主要问题。

首先是它只在异常块中执行RETURN RESULT。因此,尽管它可以编译,但它会在 运行 时间与 PLS-06503: Function returned without value 一起抛出。所以你需要在最后一个异常块之前添加一个RETURN RESULT:

         ....
     END;
     RETURN RESULT;
 EXCEPTION
    WHEN OTHERS ....

另一个问题是它 returns 一个布尔值。这意味着你不能 运行 它在 SQL 中:它会抛出 ORA-00902: Invalid datatype.

因此您可以在 TOAD 中使用匿名 PL/SQL 块对此进行测试:

begin 
     if GET_WRKFLW_LICENSE_LIMIT (
           WRK_TYPE    => 'MSG_FORMAT',
           VCLIENT_ID => 1,
           VCP_ID    => null,
           VREQ_TYPE  => null)
    then
        dbms_output.put_line('True!');
    else
        dbms_output.put_line('False!');
    end if;
end;

如果您的首选项中没有设置,请记住在 TOAD 中启用 DBMS_OUTPUT。

或者,您可能决定重写查询,使其使用 SQL 支持的数据类型,例如变种字符2。