我编写了一个返回CHAR的函数(FN_TEST_BE8)。
create or replace FUNCTION FN_TEST_BE8
( P_PARAM1 IN Char
, P_PARAM2 IN Char
) RETURN Char AS
BEGIN
RETURN P_PARAM2;
END FN_TEST_BE8;
我的问题是,当我运行它时,它会返回一个VARCHAR2,而对我来说,这是一个问题。
SELECT FN_TEST_BE8('XX','YY') RESULT
FROM DUAL
由于我在where中使用了这个函数,这迫使我将结果转换为:
SELECT *
FROM TABLE1
WHERE CHAR_2 = CAST(FN_TEST_BE8('XX','YY') AS CHAR(2));
-- DOES NOT WORK --> WHERE CHAR_2 = FN_TEST_BE8('XX','YY');
“TABLE 1.CHAR_2”字段定义为CHAR (2)。如果我使用带有标签"NOT“的注释的WHERE,则状态不会提取数据。如果强制转换函数的结果,语句将正确提取数据。
有两点我不明白
谢谢你的帮助。
发布于 2021-03-12 10:35:48
在我的11 fine上,一切似乎都很好。
表和功能:
SQL> desc table1
Name Null? Type
----------------------------------------- -------- ----------------------------
CHAR_2 CHAR(2)
SQL> select * from table1;
CH
--
XX
YY
SQL> create or replace function fn_test_be8 (p_param1 in char, p_param2 in char)
2 return char
3 as
4 begin
5 return p_param2;
6 end fn_test_be8;
7 /
Function created.
SQL>
测试:所有查询返回结果:
SQL> select fn_test_be8 ('XX', 'YY') result from dual;
RESULT
--------------------------------------------------------------------------------
YY
SQL> select *
2 from table1
3 where char_2 = cast (fn_test_be8 ('XX', 'YY') as char (2));
CH
--
YY
SQL> select *
2 from table1
3 where char_2 = fn_test_be8 ('XX', 'YY');
CH
--
YY
SQL>
您使用哪个数据库版本?您能否做同样的测试,在SQL*Plus中准确地发布我所做的以及我执行它的方式?
https://stackoverflow.com/questions/66596978
复制相似问题