PL/SQL 函数输入值似乎与函数输入参数不匹配
PL/SQL function input value seems not matching function input parameter
我今天下午创建了这个 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;
通过简单的调用进行测试时出现问题。
例如:
select check_cin_closed_line('1PW2+UB07') from dual;
select CHECK_CIN_CLOSED_LINE('') from dual;
两个测试调用 return 无效数据类型错误 (ORA-00902 - 00902.00000 - "invalid datatype")
不明白这个错误的原因,输入参数是varchar2变量,输入值是varchar值。
布尔数据类型仅在 PLSQL 中可用,在 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;
检查:
SELECT
check_cin_closed_line('1PW2+UB07')
FROM
dual;
SELECT
check_cin_closed_line('')
FROM
dual;
您可以在 PLSQL 中使用 BOOLEAN 数据类型,但不能用作 return 类型。
可以做什么?
因为您可以在 PLSQL 中使用 BOOLEAN 数据类型并且您希望查看此函数调用的结果,也许使用匿名 PLSQL 块并使用 CASE 语句来揭示BOOLEAN 的值 return 值:
BEGIN
dbms_output.put_line(
CASE
WHEN check_cin_closed_line('1PW2+UB07') THEN
'true'
ELSE 'false'
END
);
END;
我今天下午创建了这个 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;
通过简单的调用进行测试时出现问题。 例如:
select check_cin_closed_line('1PW2+UB07') from dual;
select CHECK_CIN_CLOSED_LINE('') from dual;
两个测试调用 return 无效数据类型错误 (ORA-00902 - 00902.00000 - "invalid datatype") 不明白这个错误的原因,输入参数是varchar2变量,输入值是varchar值。
布尔数据类型仅在 PLSQL 中可用,在 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;
检查:
SELECT
check_cin_closed_line('1PW2+UB07')
FROM
dual;
SELECT
check_cin_closed_line('')
FROM
dual;
您可以在 PLSQL 中使用 BOOLEAN 数据类型,但不能用作 return 类型。
可以做什么?
因为您可以在 PLSQL 中使用 BOOLEAN 数据类型并且您希望查看此函数调用的结果,也许使用匿名 PLSQL 块并使用 CASE 语句来揭示BOOLEAN 的值 return 值:
BEGIN
dbms_output.put_line(
CASE
WHEN check_cin_closed_line('1PW2+UB07') THEN
'true'
ELSE 'false'
END
);
END;