2017-10-27 4 views
0

Sybaseのクエリ:オラクルにして、Sybaseのスタッフ機能の変換

UPDATE #horizCallSign SET 
effDaysZ = STUFF(effDaysZ, csd.day+shift1, 1, '1') 
FROM #callSignTbl csd 
WHERE csd.legId1 = #horizCallSign.legId1 
AND csd.legId2 = #horizCallSign.legId2 
AND day = 28 

Oracleのクエリ:オラクルで

UPDATE TEMP_HORIZ_CALL_SIGN 
SET eff_Days_Z = REPLACE( eff_days_Z,csd.day+shift1, '1') 
FROM temp_call_sign_table1 csd 
WHERE csd.leg_Id1 = temp_horiz_Call_Sign.leg_Id1 
AND csd.leg_Id2 = horiz_Call_Sign.leg_Id2 
AND day = 28 

は、我々は彼らに "_" を有するとカラム名を変更しました。 temp_call_sign_table1およびTEMP_HORIZ_CALL_SIGNは、コミット時に ローを持つsybase tempテーブルの代わりにOracle用に作成されたグローバル一時テーブル です。

sybase DBをOracle DBに変換しています。 Oracleで上記の問合せを実行すると、QLエラーが表示されます。ORA-00933:SQLコマンドが正しく終了しませんでした。

助けてください。

答えて

0

5行目にテーブル名に問題がありましたが、これはエイリアスを使用することで簡単に回避できます。

また、SELECTなしでOracleでFROMを使用することはできません。したがって、この例ではサブクエリを使用する必要があります。たとえば...オラクルで

UPDATE TEMP_HORIZ_CALL_SIGN hcs 
SET eff_Days_Z = 
(SELECT 
    REPLACE(eff_days_Z,csd.day+shift1, '1') 
FROM temp_call_sign_table1 csd 
WHERE csd.leg_Id1 = hcs.leg_Id1 
AND csd.leg_Id2 = hcs.leg_Id2 
AND day = 28) 

(未テスト)

+0

ありがとう@ハート。それは私のために働いた。 – sandeep

+0

HI Matt、上記のクエリはSQL開発者で動作しますが、プログラムを実行すると失敗します。以下のエラーを見つけてください。 ORA-01407: "PEGASUSDB_SCHEMA"。 "TEMP_HORIZ_CALL_SIGN"。 "EFF_DAYS_Z")をNULLに変換できません。 – sandeep

+0

@sandeep申し訳ありませんが、なぜNULLが存在するのかわかりませんIDEの外で動いています –

0

あなたのエイリアシングはオフです。また、代わりにINNER JOINSを使用することを検討してください。

UPDATE THCS 
SET eff_Days_Z = REPLACE( eff_days_Z,csd.day+shift1, '1') 
FROM temp_call_sign_table1 csd , TEMP_HORIZ_CALL_SIGN THCS, horiz_Call_Sign HCS 
WHERE csd.leg_Id1 = THCS.leg_Id1 
AND csd.leg_Id2 = HCS.leg_Id2 
AND day = 28 
+0

ご返信ありがとうございます。感謝します。 – sandeep

0

、あなたはMERGE INTOを使用することができます。

MERGE INTO temp_horiz_call_sign m 
using (SELECT leg_id1, 
       leg_id2, 
       eff_days_z, 
       day + shift1 plushift1 
     FROM temp_call_sign_table1 
     WHERE day = 28) r 
ON (r.leg_id1 = m.leg_id1 
    AND r.leg_id2 = m.leg_id2) 
WHEN matched THEN 
    UPDATE SET m.eff_days_z = Replace(m.eff_days_z, r.plushift1, '1'); 
+0

あなたの返事をありがとう。感謝します – sandeep

関連する問題