从 Dual 中选择时是不是可以指定 Oracle 8i 伪列的数据类型
Posted
技术标签:
【中文标题】从 Dual 中选择时是不是可以指定 Oracle 8i 伪列的数据类型【英文标题】:Is it possible to specify the data type of an Oracle 8i pseudocolumn when Selecting from Dual从 Dual 中选择时是否可以指定 Oracle 8i 伪列的数据类型 【发布时间】:2018-08-03 14:57:26 【问题描述】:在 Oracle 中,可以像这样动态生成伪列和“伪表”(不确定这是否是官方术语):
(SELECT 'abc' AS pseudo_col_1, 123 AS pseudo_col_2 FROM dual) pseudo_table
我希望做同样的事情,同时指定pseudo_col_1
和/或pseudo_col_2
的数据类型。
以下似乎适用于 Oracle 11g,其中 pseudo_col_2
被指定为 CLOB 数据类型:
(SELECT 'abc' AS pseudo_col_1, TO_CLOB(123) AS pseudo_col_2 FROM dual) pseudo_table
但是,我需要在没有 TO_CLOB 函数的 Oracle 8i 上达到相同的结果。
免责声明:我知道 8i 已经过时,无需评论这方面,因为我对此拥有零控制权,很遗憾。
【问题讨论】:
我不确定 CLOB 支持在 8 中是否像现在这样成熟。为什么需要显式更改数据类型? 我实际上并不是要更改数据类型,而是在“生成”伪列时指定数据类型,类似于在 C 和其他语言中显式声明变量类型的方式。然而,进一步研究文档,DUAL
表包含一个 VARCHAR2
列。所以我猜我基于DUAL
创建的任何伪列都将保持VARCHAR2
类型,除非正如你提到的,我“显式更改数据类型”这显然是我使用TO_CLOB
所做的。
有没有办法从头开始生成伪表/伪列,或者从表other而不是DUAL
,其中包含DUAL
以外的数据类型的VARCHAR2
?
dual
表中列的数据类型与您的查询结果无关。你可以select 1 as a from dual
得到一个数字列。如果您解释为什么要这样做,也许会有所帮助,尽管下面 Gordon Linoff 的回答可能有效。
【参考方案1】:
你可以cast()
你想要的类型:
SELECT cast('abc' as varchar2(255)) AS pseudo_col_1,
cast(123 as decimal(10, 2)) AS pseudo_col_2
FROM dual;
【讨论】:
你不能转换成 CLOB。 @AlexPoole 。 . .我回答时没有指定 CLOB。很有趣。 抱歉,没有在问题标题中指定 CLOB,但是在问题正文中指定了它。无论如何,谢谢你的回答。 CAST 可能会在以后的版本中成为一个解决方案。以上是关于从 Dual 中选择时是不是可以指定 Oracle 8i 伪列的数据类型的主要内容,如果未能解决你的问题,请参考以下文章
oracle TO_CHAR 长度 为啥select length(to_char('120','999')) from dual 的长度是4呢?