Oracle 使用表Cast

Oracle 使用表Cast,oracle,plsql,oracle10g,Oracle,Plsql,Oracle10g,你能在电话线上用点什么吗 Select * from table(cast(select * from tab1 inner join tab2)) inner join tab3 考虑到tablecast中的内容比简单的select要复杂得多,它涉及一个块,比如test as select*。。。等等 我需要一个简单的方法来做到这一点,最好不需要一个临时表 多谢各位 数据库:Oracle 10g 乐: 我有点像 Select a.dummy1, a.dummy2, wm_concat(t2.

你能在电话线上用点什么吗

Select * from table(cast(select * from tab1 inner join tab2)) inner join tab3
考虑到tablecast中的内容比简单的select要复杂得多,它涉及一个块,比如test as select*。。。等等

我需要一个简单的方法来做到这一点,最好不需要一个临时表

多谢各位

数据库:Oracle 10g

乐:

我有点像

Select a.dummy1, a.dummy2, wm_concat(t2.dummy3)
    from table1 a, 
    (with str as 
        (Select '1,2,3,4' from dual) 
     Select a.dummy1, t.dummy3 
     from table1 a 
       inner join 
          (Select regexp_substr (str, '[^,]+', 1, rownum) split  
              from str
              connect by level <= length (regexp_replace (str, '[^,]+'))  + 1) t 
       on instr(a.dummy2, t.split) > 0) t2
where a.dummy1='xyz'
group by a.dummy1, a.dummy2
主要思想是t2.dummy3列包含CSV。这就是为什么我从dual中选择了'1,2,3,4'。 我需要找到至少包含str中一个值的所有行

使用任何类型的循环都是不可能的,因为我需要进一步将其集成到一个更大的查询中,用于SSRS中的报告,而这所需的表相当大,超过1mil行,在这里似乎完全不相关。您可以使用CAST更改表达式的感知数据类型。在这里,您将向它传递一个结果集,而不是表达式,并且您没有说明要转换到哪个数据类型

您应该能够简单地删除表和强制调用,并执行以下操作:

with str as 
        (Select '1,2,3,4' from dual)
Select a.dummy1, a.dummy2, wm_concat(t2.dummy3)
    from table1 a, 
    ( 
     Select a.dummy1, t.dummy3 
     from table1 a 
       inner join 
          (Select regexp_substr (str, '[^,]+', 1, rownum) split  
              from str
              connect by level <= length (regexp_replace (str, '[^,]+'))  + 1) t 
       on instr(a.dummy2, t.split) > 0) t2
where a.dummy1='xyz'
group by a.dummy1, a.dummy2
选择*从选择*从选项卡1内部连接选项卡2在。。。内部连接选项卡3位于

e、 g

子查询分解在这里也应该可以很好地工作

WITH x AS (SELECT * FROM DUAL)
SELECT * FROM
 (SELECT d1.dummy FROM x d1 INNER JOIN x d2 ON d1.dummy=d2.dummy) d12
 INNER JOIN dual d3 ON d12.dummy = d3.dummy;
如果你很难让这种结构发挥作用,试着在你的问题中添加更多的细节,特别是你尝试了什么以及你遇到了什么错误。

CAST在这里似乎完全不相关。您可以使用CAST更改表达式的感知数据类型。在这里,您将向它传递一个结果集,而不是表达式,并且您没有说明要转换到哪个数据类型

您应该能够简单地删除表和强制调用,并执行以下操作:

with str as 
        (Select '1,2,3,4' from dual)
Select a.dummy1, a.dummy2, wm_concat(t2.dummy3)
    from table1 a, 
    ( 
     Select a.dummy1, t.dummy3 
     from table1 a 
       inner join 
          (Select regexp_substr (str, '[^,]+', 1, rownum) split  
              from str
              connect by level <= length (regexp_replace (str, '[^,]+'))  + 1) t 
       on instr(a.dummy2, t.split) > 0) t2
where a.dummy1='xyz'
group by a.dummy1, a.dummy2
选择*从选择*从选项卡1内部连接选项卡2在。。。内部连接选项卡3位于

e、 g

子查询分解在这里也应该可以很好地工作

WITH x AS (SELECT * FROM DUAL)
SELECT * FROM
 (SELECT d1.dummy FROM x d1 INNER JOIN x d2 ON d1.dummy=d2.dummy) d12
 INNER JOIN dual d3 ON d12.dummy = d3.dummy;

如果你很难让这种结构发挥作用,试着在你的问题中添加更多的细节,特别是你尝试了什么以及你遇到了什么错误。

是的。。。我找到了答案。。。我只是太过SQL n00b而看不见它,因为它就在我面前

我只是把with语句放在查询之外,它就工作了

非常感谢你的帮助,是你的回答让我明白了我的错误:D

比如:

with str as 
        (Select '1,2,3,4' from dual)
Select a.dummy1, a.dummy2, wm_concat(t2.dummy3)
    from table1 a, 
    ( 
     Select a.dummy1, t.dummy3 
     from table1 a 
       inner join 
          (Select regexp_substr (str, '[^,]+', 1, rownum) split  
              from str
              connect by level <= length (regexp_replace (str, '[^,]+'))  + 1) t 
       on instr(a.dummy2, t.split) > 0) t2
where a.dummy1='xyz'
group by a.dummy1, a.dummy2

嗯。。。我找到了答案。。。我只是太过SQL n00b而看不见它,因为它就在我面前

我只是把with语句放在查询之外,它就工作了

非常感谢你的帮助,是你的回答让我明白了我的错误:D

比如:

with str as 
        (Select '1,2,3,4' from dual)
Select a.dummy1, a.dummy2, wm_concat(t2.dummy3)
    from table1 a, 
    ( 
     Select a.dummy1, t.dummy3 
     from table1 a 
       inner join 
          (Select regexp_substr (str, '[^,]+', 1, rownum) split  
              from str
              connect by level <= length (regexp_replace (str, '[^,]+'))  + 1) t 
       on instr(a.dummy2, t.split) > 0) t2
where a.dummy1='xyz'
group by a.dummy1, a.dummy2