SQL到Oracle SQL转换

时间:2012-08-17 20:01:24

标签: sql oracle

任何人都可以帮我将此代码转换为Oracle SQL吗?或者请告诉我为什么这会在Oracle SQL上引发错误?

declare @PropertyName varchar(64)
set @PropertyName= 'ESRegion'
select PD.PropertyId,
PD.PropertyName,
convert(varchar(255), v.Value ) DisplayValue
from Property_Dictionary PD WITH(READUNCOMMITTED) 
inner join CorpTax_LookupDefinition l on l.Lookupkey = pd.ReferenceType
join MDTable md on l.DataDictionaryTypeId = md.TableGUID 
join ValueChar v on 
(
v.TableID = md.TableID 
and v.AttributeID = l.DisplayAttributeId 
)
where PD.DataTypeid = 7
and PD.PropertyName = @PropertyName

3 个答案:

答案 0 :(得分:0)

这里有非SQL。你的意思是PL / SQL的T / SQL?另外,我不认为在Oracle中允许使用WITH(READUNCOMITTED),因为在Oracle中不允许读取未提交(如果您需要执行脏读操作,则可以更改事务隔离)。最后,我不认为转换是正确的。

答案 1 :(得分:0)

在SQL * Plus中,您可以执行以下操作:

define PropertyName='ESRegion'
SELECT PD.PropertyId, PD.PropertyName, v.Value DisplayValue 
  FROM Property_Dictionary PD 
         INNER JOIN CorpTax_LookupDefinition l 
                 ON l.Lookupkey = pd.ReferenceType 
               JOIN MDTable md ON l.DataDictionaryTypeId = md.TableGUID
               JOIN ValueChar v ON ( v.TableID = md.TableID  AND
                                     v.AttributeID = l.DisplayAttributeId  )
 WHERE PD.DataTypeid = 7 
   AND PD.PropertyName = '&PropertyName';

DEFINE替换原始代码中的DECLARE和SET。然后,您将在查询中使用DEFINE'd变量。

答案 2 :(得分:0)

这应该有效:

select PD.PropertyId, PD.PropertyName, cast(v.value as varchar(255)) as DisplayValue
from Property_Dictionary PD inner join
     CorpTax_LookupDefinition l
     on l.Lookupkey = pd.ReferenceType join
     MDTable md
     on l.DataDictionaryTypeId = md.TableGUID join
     ValueChar v
      on v.TableID = md.TableID and
         v.AttributeID = l.DisplayAttributeId 
where PD.DataTypeid = 7 and PD.PropertyName = 'ESRegion'

如其他地方所述,这有点不同。它将调用表上的读锁定。如果您关心这一点,那么您需要研究不同的Oracle锁定选项。我将CONVERT更改为CAST。目前尚不清楚v.value的类型是什么,但这应该有效。 (对于某些类型,to_char()会更好。)

我还将变量直接放入查询中。如果你想要变量,那么你不仅仅是SQL的分数,还有PL / SQL和TSQL的领域。