在 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 NVL 和 OracleParameter 在 C# 中不起作用
在 PL/SQL Developer 中运行的日期查询显示时间,但在 Oracle SQL Developer 中不显示