首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Oracle函数返回CHAR

Oracle函数返回CHAR
EN

Stack Overflow用户
提问于 2021-03-12 09:04:43
回答 1查看 417关注 0票数 0

我编写了一个返回CHAR的函数(FN_TEST_BE8)。

代码语言:javascript
运行
复制
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,而对我来说,这是一个问题。

代码语言:javascript
运行
复制
SELECT FN_TEST_BE8('XX','YY') RESULT
  FROM  DUAL

由于我在where中使用了这个函数,这迫使我将结果转换为:

代码语言:javascript
运行
复制
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,则状态不会提取数据。如果强制转换函数的结果,语句将正确提取数据。

有两点我不明白

  • 'char‘数据类型由PL/SQL支持。为什么函数不提取CHAR,而是提取VARCHAR2?
  • I会期望Oracle自动将值从一个CHAR数据类型转换为VARCHAR2数据类型

谢谢你的帮助。

EN

回答 1

Stack Overflow用户

发布于 2021-03-12 10:35:48

在我的11 fine上,一切似乎都很好。

表和功能:

代码语言:javascript
运行
复制
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>

测试:所有查询返回结果:

代码语言:javascript
运行
复制
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中准确地发布我所做的以及我执行它的方式?

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66596978

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档