加入收藏 | 设为首页 | 会员中心 | 我要投稿 威海站长网 (https://www.0631zz.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > MsSql教程 > 正文

Sql CLOB上的collect函数

发布时间:2023-01-08 12:31:20 所属栏目:MsSql教程 来源:未知
导读: Sql CLOB上的collect函数
sqloracleoracle11g
Sql CLOB上的collect函数,sql,oracle,oracle11g,Sql,Oracle,Oracle11g,我需要选择几个CLOB作为嵌套表create table t (vc_val varchar2(100),

Sql CLOB上的collect函数

sqloracleoracle11g

Sql CLOB上的collect函数,sql,oracle,oracle11g,Sql,Oracle,Oracle11g,我需要选择几个CLOB作为嵌套表create table t (vc_val varchar2(100), clob_val clob);create type varchar_t as table of varchar2(100);create type clob_t as table of clob;以下查询工作正常:select cast(collect(vc_val) as varchar_t) from t;为什么跟随失败了select cast(collect(cl

我需要选择几个CLOB作为嵌套表

create table t (vc_val varchar2(100), clob_val clob);
create type varchar_t as table of varchar2(100);
create type clob_t as table of clob;

以下查询工作正常:

select cast(collect(vc_val) as varchar_t) from t;

为什么跟随失败了

select cast(collect(clob_val) as clob_t) from t;

链接到此示例

有人能解释一下为什么第二次查询失败吗?

它不起作用,因为

CAST

不支持LOB类型

您可以在Oracle的文档中了解这一点:

使用来自的测试数据,

CAST

可以将

CLOB

转换为

VARCHAR2

SELECT CAST(clob_val AS VARCHAR2(100)) FROM t;

结果:

CAST(CLOB_VALASVARCHAR2(100))-----------------------------clob1clob2> 00932. 00000-“不一致的数据类型:预期%s得到%s”它不工作,因为

CAST

不支持LOB类型

您可以在Oracle的文档中了解这一点:

使用来自的测试数据,

CAST

可以将

CLOB

转换为

VARCHAR2

SELECT CAST(clob_val AS VARCHAR2(100)) FROM t;

结果:

CAST(CLOB_VALASVARCHAR2(100))-----------------------------clob1clob2> 00932. 00000-“不一致的数据类型:应为%s获得%s”对于LOB类型的功能支持:

CAST不直接支持任何LOB数据类型。当你使用强制转换将CLOB值转换为字符数据类型或BLOB值转换为原始数据类型时,数据库隐式转换LOB值转换为字符或原始数据,然后显式强制转换结果值转换为目标数据类型。如果结果值大于目标类型,然后数据库返回一个错误

这似乎是指从CLOB->Varchar转换。但如果已经有CLOB,则应该能够将它们放入集合(本例中为嵌套表)

我通常使用CAST+MULTISET而不是COLLECT,我认为它更容易,也不太麻烦。我认为你的问题在于这里的COLLECT+CAST,而不是CAST本身(与数字精度类似)

编辑:我删除了任何使用Collect函数的建议,尽管我可以在简单的select中使用它而不会出错Mssq类型转换函数,但我不能在pl/sql中使用它。此外,除了上面的CAST+MULTISET选项(SQL或pl/SQL)之外,您还可以(在pl/SQL中)简单地执行以下操作:

select clob_col
bulk collect into l_clob_tab
from t;

希望有帮助

对于LOB类型的功能支持:

CAST不直接支持任何LOB数据类型。当你使用强制转换将CLOB值转换为字符数据类型或BLOB值转换为原始数据类型时,数据库隐式转换LOB值转换为字符或原始数据,然后显式强制转换结果值转换为目标数据类型。如果结果值大于目标类型,然后数据库返回一个错误

这似乎是指从CLOB->Varchar转换。但如果已经有CLOB,则应该能够将它们放入集合(本例中为嵌套表)

我通常使用CAST+MULTISET而不是COLLECT,我认为它更容易,也不太麻烦。我认为你的问题在于这里的COLLECT+CAST,而不是CAST本身(与数字精度类似)

编辑:我删除了任何使用Collect函数的建议,尽管我可以在简单的select中使用它而不会出错,但我不能在pl/sql中使用它。此外,除了上面的CAST+MULTISET选项(SQL或pl/SQL)之外,您还可以(在pl/SQL中)简单地执行以下操作:

select clob_col
bulk collect into l_clob_tab
from t;

希望有帮助。

您不能将

COLLECT

CLOB

参数一起使用,它会抛出

00932。00000-“不一致的数据类型:应为%s获得%s”

错误。至少它对我不起作用+1对于

MULTISET

方法。@PrzemyslawKruglej对此表示感谢。我可以将COLLECT与CLOB结合使用(从t中选择COLLECT(CLOB_val)),但Oracle不喜欢将CAST+COLLECT与CLOB结合使用。老实说,我不知道为什么,但我在CAST+COLLECT方面还有其他问题,所以我避免使用它,而是使用multiset。您使用的是Oracle的哪个版本?我有一个最新的11g版本。。。想知道为什么collect对我不起作用。@PrzemyslawKruglej 11.2.0.2。0@PrzemyslawKruglej我只是在Toad中运行CollectSQL,它返回一个数据集类型(不会抛出错误)。但是,我还没有尝试在PL/SQL中使用它。我在Collect方面的经验是有缺陷的(或者我应该说是怪异的),我发誓我有一些SQL使用Collect会关闭我与Oracle的连接(一致),希望我还有那个可以发布。无论如何,我的2美分是使用Cast+Multiset并避免collect。你不能将

collect

CLOB

参数一起使用,它会抛出

00932。00000-“不一致的数据类型:应为%s获得%s”

错误。至少它对我不起作用+1对于

MULTISET

方法。@PrzemyslawKruglej对此表示感谢。我可以将COLLECT与CLOB结合使用(从t中选择COLLECT(CLOB_val)),但Oracle不喜欢将CAST+COLLECT与CLOB结合使用。老实说,我不知道为什么,但我在CAST+COLLECT方面还有其他问题,所以我避免使用它,而是使用multiset。您使用的是Oracle的哪个版本?我有一个最新的11g版本。。。想知道为什么collect对我不起作用。@PrzemyslawKruglej 11.2.0.2。0@PrzemyslawKruglej我只是在Toad中运行CollectSQL,它返回一个数据集类型(不会抛出错误)。但是,我还没有尝试在PL/SQL中使用它。我在Collect方面的经验是有缺陷的(或者我应该说是怪异的),我发誓我有一些SQL使用Collect会关闭我与Oracle的连接(一致),希望我还有那个可以发布。无论如何,我的2美分是使用Cast+Multiset和避免collect。

select clob_col
bulk collect into l_clob_tab
from t;

(编辑:威海站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!