COLLECT 语句中 ORDER BY 的语法错误

Syntax error in ORDER BY in COLLECT statement

提问人:user5507535 提问时间:4/27/2021 最后编辑:user5507535 更新时间:4/28/2021 访问量:180

问:

为什么我在此代码中收到语法错误:order by

语法错误由 Oracle SQL Express 和 https://www.eversql.com/sql-syntax-check-validator/ 报告

select cast(collect(
   case
      when (1 = 1) then 
         'aaa'
      else 'bbb'
   end
order by mt.my_col) as t_varchar2_tab)
from my_table mt;

enter image description here

SQL Oracle 选择 语法错误 oracle19c

评论

0赞 leftjoin 4/27/2021
你声明t_varchar2_tab类型了吗?
1赞 Sayan Malakshinov 4/27/2021
不要将 Eversql 用于 Oracle SQL。它不支持 Oracle SQL。

答:

2赞 Sayan Malakshinov 4/27/2021 #1

只需再添加一个:cast

select cast(collect(
   cast(
     case
        when (1 = 1) then 
           'aaa'
        else 'bbb'
     end
     as varchar2(100)
    )
order by mt.my_col) as t_varchar2_tab)
from my_table mt;

完整示例:

with my_table as (select to_char(level,'000') my_col from dual connect by level<=10)
select cast(collect(
   cast(
     case
        when (1 = 1) then 
           'aaa'
        else 'bbb'
     end
     as varchar2(100)
    )
order by mt.my_col) as t_varchar2_tab)
 as res
from my_table mt;

RES
-------------------------------------------------------------------------------------
T_VARCHAR2_TAB('aaa', 'aaa', 'aaa', 'aaa', 'aaa', 'aaa', 'aaa', 'aaa', 'aaa', 'aaa')


不要将eversql用于Oracle SQL。它仅支持 MySQL

评论

0赞 user5507535 4/28/2021
抱歉,您的示例仍然被 SQL 开发人员报告包含语法错误,我这里的版本是 19.2.1.247。order by
0赞 Sayan Malakshinov 4/28/2021
您的 Oracle 数据库版本是什么?select * from v$version
0赞 user5507535 4/28/2021
Oracle Database 19c 标准版 2 版本 19.0.0.0.0 — 生产。SQL Developer 的版本为 19.2.1.247。
0赞 Sayan Malakshinov 4/28/2021
显示完整的测试用例和错误输出。
0赞 user5507535 4/28/2021
使用错误图像更新了问题。