OMWB - két újabb idegesítő bug?
2008. augusztus 14., csütörtök by Zoltan Tanczos
Folytatódik a munkahelyemen a migráció előkészítése: nézegetjük, hogy egyrészt mire képes a Migration Workbench, másrészt mik azok a lehetséges buktatók, amikre még nem gondoltunk.
Eközben találtam egy újabb bug-gyanús - igen idegesítő - hibát az OMWB-ben:
Ha valamilyen Oracle kulcsszó szerepel azonosítóként az SQL Server oldali kódban, azt okosan átalakítja, például:
select @something = date
from MyTable
ez a kód teljesen jó SQL Server alatt, ha a MyTable táblának van date nevű oszlopa. Ezt az alábbi kódra alakítja át:
SELECT date_
INTO v_something
FROM MyTable ;
A konvertálás előtt egy kollégám elkészített egy olyan sémát, ahol az összes oracle-s kulcsszó mögé egy _-t szúrt. Tehát már SQL Server oldalon az összes date-ből date_ lett, a type-okból type_, és így tovább. Viszont konvertálás után az összes type_ azonosítóra való hivatkozásból újra type lett. Ami SQL Server alatt:
select @something = type_
from MyTable
az konvertálás után:
SELECT type
INTO v_something
FROM MyTable ;
ami természetesen hibás. Ugyanez más kulcsszó esetén nem jött elő, tehát a date_-ek megmaradtak :)
A másik bug a következő: amit már egy korábbi bejegyzésben írtam is, az SQL Server megengedi, hogy egy tárolt eljárás bemenő paraméterét mezei változóként kezeljük, azaz állhat értékadás bal oldalán. Ezt az OMWB kezeli is, egy belső, rendesen deklarált változó segítségével. Ha a paraméterre való hivatkozás mindenhol pontosan ugyanaz, case sensitive-en:
create procedure foo (@bar int)
as
begin
select @Bar=5
end
itt ugye a hivatkozás megegyezik, leszámítva a kis/nagy B betűt. Az OMWB emiatt megzavarodik picit:
CREATE OR REPLACE PROCEDURE foo
(
v_bar IN NUMBER DEFAULT NULL
)
AS
BEGIN
v_Bar := 5;
END;
Sajnos ezek igen idegesítő hibák, remélem valahogy meg lehet majd őket kerülni, vagy ha nem, akkor hamar kijavítják.
UPDATE: visszaigazolt bug: 7332018: FORUMS: PROCEDURE ARGUMENTS NEED TO MATCH VARIABLE NAMES IN CASE.
Eközben találtam egy újabb bug-gyanús - igen idegesítő - hibát az OMWB-ben:
Ha valamilyen Oracle kulcsszó szerepel azonosítóként az SQL Server oldali kódban, azt okosan átalakítja, például:
select @something = date
from MyTable
ez a kód teljesen jó SQL Server alatt, ha a MyTable táblának van date nevű oszlopa. Ezt az alábbi kódra alakítja át:
SELECT date_
INTO v_something
FROM MyTable ;
A konvertálás előtt egy kollégám elkészített egy olyan sémát, ahol az összes oracle-s kulcsszó mögé egy _-t szúrt. Tehát már SQL Server oldalon az összes date-ből date_ lett, a type-okból type_, és így tovább. Viszont konvertálás után az összes type_ azonosítóra való hivatkozásból újra type lett. Ami SQL Server alatt:
select @something = type_
from MyTable
az konvertálás után:
SELECT type
INTO v_something
FROM MyTable ;
ami természetesen hibás. Ugyanez más kulcsszó esetén nem jött elő, tehát a date_-ek megmaradtak :)
A másik bug a következő: amit már egy korábbi bejegyzésben írtam is, az SQL Server megengedi, hogy egy tárolt eljárás bemenő paraméterét mezei változóként kezeljük, azaz állhat értékadás bal oldalán. Ezt az OMWB kezeli is, egy belső, rendesen deklarált változó segítségével. Ha a paraméterre való hivatkozás mindenhol pontosan ugyanaz, case sensitive-en:
create procedure foo (@bar int)
as
begin
select @Bar=5
end
itt ugye a hivatkozás megegyezik, leszámítva a kis/nagy B betűt. Az OMWB emiatt megzavarodik picit:
CREATE OR REPLACE PROCEDURE foo
(
v_bar IN NUMBER DEFAULT NULL
)
AS
BEGIN
v_Bar := 5;
END;
Sajnos ezek igen idegesítő hibák, remélem valahogy meg lehet majd őket kerülni, vagy ha nem, akkor hamar kijavítják.
UPDATE: visszaigazolt bug: 7332018: FORUMS: PROCEDURE ARGUMENTS NEED TO MATCH VARIABLE NAMES IN CASE.
Szia Zoli,
Ezeket a dolgokat jelzed valami Oracle fórumon is? Mert érdemes lenne, hogy tényleg javítsák, vagy hátha mondanak rá valami áthidaló megoldást. A legjobb lenne a metalinken, ha van jogosultságod valami úton, de az is jó ha az Oracle migrációs központjával veszed fel a kapcsolatot. Ebben segítek, ha kell.
Üdv.
Lajos
Szia,
egyelőre mindent az OTN-re írok, abba a thread-be, amit a nagy L betűk kapcsán nyitottam még:
http://forums.oracle.com/forums/thread.jspa?threadID=693457&start=0&tstart=0
eddig ebből kettőt igazoltak vissza, a nagy L betűs dolgot (mint kiderült, valami karakterkészlet gond volt csak, az angol font jel alakult át L-é) és hogy a paramétereknek case sensitive-en meg kell egyezniük a hivatkozásukkal.
A metalinket nem ismerem, az mire jó?
bocs, nem OTN-re, hanem oracle fórumra, mindegy, késő van már ;)