简体   繁体   English

PL/SQL 函数输入值似乎与函数输入参数不匹配

[英]PL/SQL function input value seems not matching function input parameter

I've created this afternoon this PL/SQL function :我今天下午创建了这个 PL/SQL 函数:

CREATE OR REPLACE FUNCTION CHECK_CIN_CLOSED_LINE
    (combination IN VARCHAR2 DEFAULT '') 

   RETURN BOOLEAN 

IS 
    solution BOOLEAN := false;

    cursor c1 is
        SELECT (1)
        FROM RS2QTCIN cin, RS2QTGIN gin
        WHERE cin.group_id = gin.id
        AND cin.cin_value = combination
        and cin.date_end is not null;
    my_c1 c1%rowtype;
BEGIN
   open c1;

   FETCH c1 INTO my_c1;

   IF c1%NOTFOUND THEN
        IF c1%ROWCOUNT != 0 THEN
            solution := true;
        END IF;
   END IF;

   close c1;

RETURN solution;

EXCEPTION
WHEN OTHERS THEN
   raise_application_error(-20001,'An error was encountered - '||SQLCODE||' -ERROR- '||SQLERRM);
END;

The problem comes when testing in with a simple call.问题出现在通过简单调用进行测试时。 For example :例如 :

select check_cin_closed_line('1PW2+UB07') from dual;
select CHECK_CIN_CLOSED_LINE('') from dual;

Both test calls return an error of invalid datatype (ORA-00902 - 00902. 00000 - "invalid datatype") I dont't understand the reason of this error, the input parameter is varchar2 variable and the input value is a varchar value.两个测试调用都返回无效数据类型的错误 (ORA-00902 - 00902. 00000 - "无效数据类型") 我不明白这个错误的原因,输入参数是 varchar2 变量,输入值是一个 varchar 值。

The Boolean Data Type is Only Available in PLSQL, not in SQL布尔数据类型仅在 PLSQL 中可用,在 SQL 中不可用

Notice that if you comment most of the body of the function, you will receive the same error:请注意,如果您对函数主体的大部分进行注释,您将收到相同的错误:

CREATE OR REPLACE FUNCTION check_cin_closed_line (
    combination IN VARCHAR2 DEFAULT ''
) RETURN BOOLEAN IS
    solution BOOLEAN := false;

--    cursor c1 is
--        SELECT (1)
--        FROM RS2QTCIN cin, RS2QTGIN gin
--        WHERE cin.group_id = gin.id
--        AND cin.cin_value = combination
--        and cin.date_end is not null;
--    my_c1 c1%rowtype;
BEGIN
--   open c1;
--
--   FETCH c1 INTO my_c1;
--
--   IF c1%NOTFOUND THEN
--        IF c1%ROWCOUNT != 0 THEN
--            solution := true;
--        END IF;
--   END IF;
--
--   close c1;
    RETURN solution;
EXCEPTION
    WHEN OTHERS THEN
        raise_application_error(-20001, 'An error was encountered - '
                                        || sqlcode
                                        || ' -ERROR- '
                                        || sqlerrm);
END;

Check:查看:

SELECT
    check_cin_closed_line('1PW2+UB07')
FROM
    dual;


SELECT
    check_cin_closed_line('')
FROM
    dual;

在此处输入图片说明

You can used the BOOLEAN data type in PLSQL, but not as the return type.您可以在 PLSQL 中使用 BOOLEAN 数据类型,但不能作为返回类型。


What Can Be Done?可以做什么?

Since you can use BOOLEAN data types in PLSQL and you want to see the results of this function invocation, perhaps use an anonymous PLSQL block and use a CASE statement to reveal the value of the BOOLEAN return value:由于您可以在 PLSQL 中使用 BOOLEAN 数据类型,并且您想查看此函数调用的结果,也许可以使用匿名 PLSQL 块并使用 CASE 语句来显示 BOOLEAN 返回值的值:

BEGIN
    dbms_output.put_line(
        CASE
            WHEN check_cin_closed_line('1PW2+UB07') THEN
                'true'
            ELSE 'false'
        END
    );
END; 

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM