【问题标题】:How to convert a query that uses variables from MySQL to Oracle?如何将使用变量的查询从 MySQL 转换为 Oracle?
【发布时间】:2011-12-05 16:31:14
【问题描述】:

我为 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 

【问题讨论】:

    标签: mysql oracle10g


    【解决方案1】:

    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
          .....
    

    【讨论】:

      猜你喜欢
      • 2019-07-29
      • 2018-11-01
      • 2013-07-10
      • 2013-09-06
      • 2015-10-03
      • 1970-01-01
      • 2020-07-09
      • 1970-01-01
      • 2012-07-15
      相关资源
      最近更新 更多