任何人都可以帮我将此代码转换为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
答案 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的领域。