Sql Oracle-从dual中选择常量值作为M x N表

Sql Oracle-从dual中选择常量值作为M x N表,sql,oracle,oracle11g,Sql,Oracle,Oracle11g,目前,我正在使用类似于下面语句的方法来创建一个临时的类似表的结构 WITH CONFIGURATION AS ( SELECT 'some blah value' AS BLAH , 'some blee value' AS BLEE FROM DUAL UNION SELECT 'some other blah value' AS BLAH, 'some other blee value' AS BLEE FROM DUAL ) SELECT 'BLAH BLAH' FROM

目前,我正在使用类似于下面语句的方法来创建一个临时的类似表的结构

WITH CONFIGURATION AS (
   SELECT 'some blah value' AS BLAH , 'some blee value' AS BLEE FROM DUAL
   UNION
   SELECT 'some other blah value' AS BLAH, 'some other blee value' AS BLEE FROM DUAL
)
SELECT 'BLAH BLAH' FROM CONFIGURATION C, SOME_OTHER_TABLE T WHERE C.BLAH=T.BLAH
我在这里面临的问题是,当我必须为10x7表结构实现相同的结构时,查询会变得相当大和混乱。

使用
DUAL
或任何其他系统表,而不必使用
UNION
并多次重写
SELECT FROM DUAL
是否有更简单的方法来实现这一点

注意:

  • 我对此数据库没有DDL权限。否则,我会为实现这一目标创建一个表格
  • 数据库版本为oracle 11g
  • M x N结构内的数据本质上是不规则的

也许是这样的

select * from (
  select trunc( (rownum - 1) / 3) as x, mod(rownum - 1, 3) as y, column_value
  from table( dbmsoutput_linesarray(
           'some blah value' , 'some blee value', 'some bluuu value',
           'some other blah value', 'some other blee value', 'some other bluuu value',
           'blah 5', 'blee 5', 'bluu 5',
           'blah 6', 'blee 6', 'bluu 6'
                ))
)
pivot (
  max( column_value )
  for y in ( 0 as blah, 1 as blee, 2 as bluuu )
)

考虑到您拥有DML特权,这是一个很好的方法。如果格式正确,语句的长度将不再是可读取和可维护的。通过Oracle子查询分解,您可以在With子句中包含多个唯一语句,并通过使用别名和逗号将它们“菊花链”在一起。更好地使用别名可以更容易地管理内容。查看此网站以获取示例:在
select.列表中使用
UNION ALL
。。来自双
语句,而不是联合,以避免进行不必要的排序/区分。此外,如果您的数据无法使用@Mat建议的connect by,并且无法在db上执行DDL(并且没有可以插入的相应表),那么您只能使用
UNION ALL
来模拟您的数据“表”。尽管我认为您可以使用PL/SQL将所有内容都放入数组中,然后返回直接查询数组的ref游标(通过
TABLE()
)。不过,这假设已经存在一个对应的数组数据库类型。因此,我只能使用这个查询。太棒了。这正是我想要的。这不仅是干净的,而且当数据集很大时,它还大大减少了查询大小。非常感谢。