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 Query:
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
在Oracle中,我们使用" _"更改了列名称。在他们中。 temp_call_sign_table1和TEMP_HORIZ_CALL_SIGN是全局临时表 为Oracle创建的代替具有on commit preserve的sybase临时表 行。
我们正在将sybase DB转换为Oracle DB。当我在oracle中执行上述查询时,它说QL错误:ORA-00933:SQL命令未正确结束。
请帮忙。
答案 0 :(得分: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
答案 1 :(得分: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)
(未经测试)
答案 2 :(得分:0)
在Oracle中,您可以使用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');