从 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中lpad函数是干嘛用的?

dual在oracle中是啥意思?

oracle dual是啥表

Oracle中dual表的用途介绍

oracle TO_CHAR 长度 为啥select length(to_char('120','999')) from dual 的长度是4呢?

跨平台检查 SQL 中是不是存在“DUAL”表的方法