【问题标题】:SELECT DISTINCT OVER TEXT as needs over common query in PostgreSQL and OracleSELECT DISTINCT OVER TEXT 作为 PostgreSQL 和 Oracle 中常见查询的需要
【发布时间】:2020-02-03 06:37:40
【问题描述】:

我的桌子

名称 - 文件夹 列 - 文本数据类型的描述

SELECT DISTICT description 
from FOLDER 

在 PostgreSQL 中工作正常,但在 oracle 中失败并出现错误

ORA-00932:不一致的数据类型:预期 - 得到 CLOB

为此,我需要一个在 PostgreSQL 和 Oracle 中都可以使用的通用查询 SELECT DISTINCT description from FOLDER.

【问题讨论】:

  • 你不能在Oracle中使用CLOB,使用varchar
  • 但是为什么你需要一个 DISTINCT 来覆盖一个名为 description 的列?
  • 在PostgreSQL和Oracle中有没有通用的方法(代码)将CLOB转换为varchar
  • 需要 DISTINCT 而非描述是功能需求
  • 在 Postgres 中就像 alter table folder alter description type varchar 一样简单。在 Oracle 中,您需要创建一个新 (varchar) 列,将旧列的内容复制到新列,删除旧列并将新列重命名为 description

标签: sql oracle postgresql distinct clob


【解决方案1】:

Oracle 不支持 DISTINCTCLOB 列。可以使用TO_CHAR(当CLOB列的最大长度小于4000时)

SELECT DISTINCT to_char(description) from FOLDER;

由于您在评论中提到它对 oracle 工作正常,我认为没有长度问题。当您正在寻找POSTGRESORACLE 的通用解决方案时,我建议CAST

SELECT DISTINCT CAST(description as varchar(3000)) from FOLDER;

这应该适用于两个数据库。将VARCHAR(N) 相应地更改为最大限制。

注意:我不建议在 oracle 中使用 VARCHAR 代替 VARCHAR2

VARCHAR 数据类型与 VARCHAR2 数据类型同义。为避免可能的行为变化,请始终使用 VARCHAR2 数据类型来存储可变长度的字符串。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-04-12
    • 2013-09-16
    • 1970-01-01
    • 2016-05-06
    • 2015-08-24
    • 1970-01-01
    • 2021-07-06
    相关资源
    最近更新 更多