Преобразование рекурсивного предложения WITH SQL Server в Oracle 10g - PullRequest
0 голосов
/ 09 ноября 2010

У меня проблема с этим запросом

DECLARE @INPUT INT
SET     @INPUT = 12345

;
WITH ABCD(SEQ, X, Y)
AS
(
    SELECT  1, 
            @INPUT % 10,
            @INPUT / 10

    UNION ALL

    SELECT  SEQ + 1,
            Y % 10,
            Y / 10
    FROM    ABCD
    WHERE   X > 0 OR Y > 0
)
SELECT *
FROM   ABCD
ORDER BY SEQ

этот запрос выдаст что-то вроде этого

alt text

Я хочу преобразовать это в Oracle 10g (mustдействителен для 10 г)

Спасибо

1 Ответ

2 голосов
/ 09 ноября 2010

Я немного обманываю, чтобы вычислить X, полагаясь на разбор строк, а не на математические операции. Но что-то вроде этого работает

РЕДАКТИРОВАТЬ: Забыл о 6-й строке.Я также удалил чит строки символов

with t as (
  select 12345 col1 from dual
)
select level seq, 
       trunc((col1 - 
              power(10,level) * trunc(col1/(power(10,level)))) / 
             power(10,level-1)) x,
       trunc(col1/(power(10,level))) y 
  from t
 connect by level <= length(col1)+1
/

SQL> ed
Wrote file afiedt.buf

  1  with t as (
  2    select 12345 col1 from dual
  3  )
  4  select level seq,
  5         trunc((col1 -
  6                power(10,level) * trunc(col1/(power(10,level)))) /
  7               power(10,level-1)) x,
  8         trunc(col1/(power(10,level))) y
  9    from t
 10*  connect by level <= length(col1)+1
SQL> /

       SEQ          X          Y
---------- ---------- ----------
         1          5       1234
         2          4        123
         3          3         12
         4          2          1
         5          1          0
         6          0          0

6 rows selected.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...