【问题标题】:Concatenating Integer to String Works without TO_CHAR in PL/SQL在 PL/SQL 中不使用 TO_CHAR 将整数连接到字符串
【发布时间】: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

标签: plsql concatenation sqldatatypes


【解决方案1】:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-04-27
    • 2013-02-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-01-27
    • 1970-01-01
    • 2015-09-05
    相关资源
    最近更新 更多