0

このコードを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
4

3 に答える 3

0

ここには非SQLがあります。T/SQL から PL/SQL へということですか? また、OracleではWITH(READUNCOMITTED)が許可されていないため、コミットされていない読み取りは許可されていないと思います(ダーティリードを実行する機能が必要な場合は、トランザクションの分離を変更できます)。最後に、convert が正しく使用されているとは思いません。

于 2012-08-17T20:23:20.943 に答える
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 の領域に入ります。

于 2012-08-17T20:55:11.717 に答える
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 された変数を使用します。

于 2012-08-17T20:53:09.240 に答える