Oracle: Long - varchar konverzió II.
Adatbázisokkal kapcsolatos cikkek / Oracle (1883 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 |