Oracle: Long - varchar konverzió II.

Adatbázisokkal kapcsolatos cikkek / Oracle (1604 katt)

Előfordulhat, hogy egy Oracle táblában található mezőt (pl.egy hosszú megjegyzést) valaki long típusúként határozott meg. Ha ezt a típust nem tudjuk vagy nem akarjuk megváltoztatni, ám mégis szeretnénk listákon megjeleníteni mondjuk a megjegyzés első néhány karakterét, akkor az alább részletezett problémákba futhatunk bele.

Legyen a tábla szerkezete az alábbi:

create table long_proba
(id integer,
megjegyzes long,

primary key (id));



Töltsük fel adatokkal a táblát:

insert into long_proba values (1, '123456789');
insert into long_proba values (2, 'abcdefghi');
commit;



Ha megpróbálkozunk az alábbi select futtatásával, akkor az ORA-00932: ellentmondásos adattípusok: NUMBER helyett LONG szerepel hibaüzenetet kapjuk.

select id,
substr(megjegyzes,1,5)
from long_proba;



A problémát meg lehet oldani egy Oracle function létrehozásával:

create or replace function lp_megjegyzes
(p_id integer,
p_length integer)

return varchar2 is

v_megjegyzes long;

begin
select megjegyzes
into v_megjegyzes
from long_proba
where id = p_id;

return substr(v_megjegyzes,1,p_length);
end lp_megjegyzes;



Ekkor a következő select már a megfelelő eredményt (esetünkben a megjegyzés első 5 karakterét) adja vissza:

select id,
lp_megjegyzes(id,5)
from long_proba;



----------------------------

Egy megjegyzés: ha Centura SQLWindows/32-t használunk, és egy QRP-nek akarjuk átadni a megjegyzés fenti módon megváltoztatott értékét, akkor valamilyen homályos oknál fogva a függvény visszatérési értékét is substr-be kell tenni, egyébként a riporton nem jelenik meg a megjegyzés tartalma:

select id,
substr(lp_megjegyzes(id,5),1,5)
from long_proba;


Előző oldal Kapitány