在 PL/SQL 中不使用 TO_CHAR 将整数连接到字符串

Posted

技术标签:

【中文标题】在 PL/SQL 中不使用 TO_CHAR 将整数连接到字符串【英文标题】:Concatenating Integer to String Works without TO_CHAR in PL/SQL 【发布时间】:2019-09-25 07:16:44 【问题描述】:

我很好奇为什么不使用TO_CHAR 就可以将整数连接到字符串,如下例所示:

declare
    type test_table is table of varchar2(20);

    test_session   test_table;
begin
    with
        sessions
        as
            (select 1 session_num from dual
             union
             select 2 session_num from dual),
        session_concat
        as
            (select 'Session: ' || session_num
             from dual, sessions)
    select *
    bulk collect into test_session
    from session_concat;
end;
/

连接也适用于CONCAT 关键字而不是|| 运算符,此外,当声明和连接整数变量时(而不是选择FROM DUAL)。

【问题讨论】:

我相信这是一种“隐式”转换,Oracle 和 MSSQL 会自动将原始类型转换为目标数据类型。小心这些,因为行为并不总是可预测的,尤其是在 where 子句中。谷歌搜索隐式转换应该可以帮助您理解这一点。 谢谢。我找到了 Oracle 隐式转换的文档。感谢您的提示——为了安全起见,我总是使用TO_CHAR 【参考方案1】:

这是 Oracle 执行 implicit data conversion 的示例。

执行显式数据类型转换是最佳实践(原因在本文的 cmets 和链接的 Oracle 文档页面中讨论)。

【讨论】:

以上是关于在 PL/SQL 中不使用 TO_CHAR 将整数连接到字符串的主要内容,如果未能解决你的问题,请参考以下文章

调整 PL/SQL 输出的格式

PL/SQL NVL 和 OracleParameter 在 C# 中不起作用

如何在 PL/SQL 中按每天分组?

PL/SQL 游标:将计数提取为整数,语法错误?

在 PL/SQL Developer 中运行的日期查询显示时间,但在 Oracle SQL Developer 中不显示

错误:PL SQL 包中不存在表或视图