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作为嵌套表
以下查询工作正常:
为什么跟随失败了
链接到此示例 有人能解释一下为什么第二次查询失败吗? 它不起作用,因为
不支持LOB类型 您可以在Oracle的文档中了解这一点: 使用来自的测试数据,
可以将
转换为
:
结果: CAST(CLOB_VALASVARCHAR2(100))-----------------------------clob1clob2> 00932. 00000-“不一致的数据类型:预期%s得到%s”它不工作,因为
不支持LOB类型 您可以在Oracle的文档中了解这一点: 使用来自的测试数据,
可以将
转换为
:
结果: 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中)简单地执行以下操作:
希望有帮助 对于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中)简单地执行以下操作:
希望有帮助。 您不能将
与
参数一起使用,它会抛出
错误。至少它对我不起作用+1对于
方法。@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。你不能将
与
参数一起使用,它会抛出
错误。至少它对我不起作用+1对于
方法。@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。
(编辑:威海站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |