Как преобразовать запрос, который использует переменные из MySQL в Oracle? - PullRequest
0 голосов
/ 05 декабря 2011

Я написал этот запрос для MySQL. Как я могу преобразовать деталь с переменными @SA и @SB для работы с oracle 10g?

Заранее спасибо.

select ID1,ID2, PID, SEQ1, KEY1, NAME1, DESC1, STA1, AS1, SEQ2, KEY2, NAME2, DESC2, STA2, AS2, 
case when ( SORT is not null ) then @SA := SORT else @SA := @SA + 1 end as S1 , 
case when ( SORT2 is not null ) then @SB := SORT2 else @SB := @SB + 1 end as S2   
from ( select @SA := 400 , doc.ID ID1, dn.SEQUENCE SEQ1, 
doc.DOCUMENTKEY KEY1, doc.NAME NAME1,  
doc.DESCRIPTION DESC1, doc.STATUSID STA1, 
doc.ASSIGNEDTOID AS1, doc.PROJECTID  PID, 
v.ORIGINDOCUMENTID ORG1, dn.GLOBALSORTORDER SORT   
from DOCUMENT doc inner join DOCUMENTNODE dn on doc.ID = dn.REFID 
inner join BASELINE b on dn.BASELINEID = b.ID 
inner join VERSION v on  v.DOCUMENTID = dn.REFID 
where dn.ACTIVE = 'T' 
and doc.PROJECTID = b.PROJECTID 
and dn.BASELINEID = 9   
and dn.SEQUENCE like '2%' ) b1
LEFT JOIN
( select @SB := 200 , doc.ID ID2,  dn.SEQUENCE SEQ2, doc.DOCUMENTKEY KEY2, doc.NAME NAME2, doc.DESCRIPTION DESC2, doc.STATUSID STA2, doc.aSSIGNEDTOID AS2, 
v.ORIGINDOCUMENTID ORG2, dn.GLOBALSORTORDER SORT2  
from dOCUMENT doc inner join DOCUMENTNODE dn on doc.ID = dn.REFID 
inner join BASELINE b on dn.BASELINEID = b.id 
inner join VERSION v on  v.DOCUMENTID = dn.REFID 
where dn.ACTIVE = 'T' and doc.PROJECTID = b.PROJECTID 
   and dn.BASELINEID = 10     
 and dn.SEQUENCE like '3.%' ) b2
  on b1.ORG1 = b2.ORG2 
  ORDER BY S2, S1 

1 Ответ

0 голосов
/ 06 декабря 2011

Oracle работает с переменными / переименованием столбцов немного по-другому. Вы можете просто использовать ключевое слово "AS" для вычисляемых выражений и дать им имя, как вы делали выше.

Например,

select @SA := 400 , doc.ID ID1, dn.SEQUENCE SEQ1 from document1

изменится на

select 400 AS SA, doc.ID ID1, dn.SEQUENCE SEQ1 from document1

После того, как вы дадите новое имя, вы можете использовать это имя во всех вложенных запросах, как показано ниже.

SQL> select empno, sal, 20 as bonus_percent from scott.emp;

     EMPNO        SAL BONUS_PERCENT

      7369        800            20
      7499       1600            20
      ......

SQL> select empno, sal* (100+bonus_percent)/100 from (
  2     select empno, sal, 20 as bonus_percent from scott.emp
  3  );

     EMPNO SAL*(100+BONUS_PERCENT)/100
---------- ---------------------------
      7369                         960
      7499                        1920
      .....
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...