Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/oracle/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql Oracle字符串组合置换_Sql_Oracle_Plsql_Oracle10g - Fatal编程技术网

Sql Oracle字符串组合置换

Sql Oracle字符串组合置换,sql,oracle,plsql,oracle10g,Sql,Oracle,Plsql,Oracle10g,我想我有一个复杂的要求 这是一个使用Oracle10.2的组合置换,我可以用笛卡尔连接来解决它,但我认为它需要一些改进,使它更简单、更灵活 主要行为 输入字符串:“一两” 输出: “一个” “两个” “一二” “二一” 对于我的解决方案,我将字符串的数量限制为5。请注意,输出是一个接近阶乘的数字 SQL: 编辑:得到了通用的。最后真的很简单,但我花了一段时间才到达那里 WITH words AS ( SELECT REGEXP_SUBSTR( '&txt', '\S+', 1, L

我想我有一个复杂的要求

这是一个使用Oracle10.2的组合置换,我可以用笛卡尔连接来解决它,但我认为它需要一些改进,使它更简单、更灵活

主要行为

输入字符串:“一两”

输出: “一个” “两个” “一二” “二一”

对于我的解决方案,我将字符串的数量限制为5。请注意,输出是一个接近阶乘的数字

SQL:


编辑:得到了通用的。最后真的很简单,但我花了一段时间才到达那里

WITH words AS
(   SELECT  REGEXP_SUBSTR( '&txt', '\S+', 1, LEVEL )    AS word
        ,   LEVEL                                       AS num
    FROM    DUAL
    CONNECT BY LEVEL <= LENGTH( REGEXP_REPLACE( '&txt', '\S+\s*', 'X' ) )
)
SELECT  SYS_CONNECT_BY_PATH( W.word, ' ' )
FROM    words   W
CONNECT BY NOCYCLE PRIOR W.num != W.num

Edit2:删除了冗余的maxnum内容。从以前的尝试中遗留下来的

它必须是SQL还是也可以使用plsql?您将拥有固定数量的字符串元素?因为如果它可以变化,那么我不知道如何避免使用PL/SQL路由。您使用flexible一词表明您正是这么想的。是的,可以使用plsql完成。关于字符串元素的数量,它是可变的。它可以是从1到n。。但是由于大量的组合,我同意<8。请注意,一个9元素的字符串生成986481 combinationsgreat解决方案,这正是我所需要的!
WITH words AS
(   SELECT  REGEXP_SUBSTR( '&txt', '\S+', 1, LEVEL )    AS word
        ,   LEVEL                                       AS num
    FROM    DUAL
    CONNECT BY LEVEL <= LENGTH( REGEXP_REPLACE( '&txt', '\S+\s*', 'X' ) )
)
SELECT  SYS_CONNECT_BY_PATH( W.word, ' ' )
FROM    words   W
CONNECT BY NOCYCLE PRIOR W.num != W.num