[ORACLE] varchar2 to blob

Pagina: 1
Acties:
  • 108 views sinds 30-01-2008
  • Reageer

  • reddevil
  • Registratie: Februari 2001
  • Laatst online: 06-10-2025
Ik probeer een typecasting van een varchar2 naar een blob te doen in PL/SQL developer. Ik heb echter geen idee hoe dit koet, diverse forums afgezocht, maar of de verkeerde of het kan niet.


Als ik bijvoorbeeld het volgende statement uitvoer:
SQL:
1
update <tablename> set <blobfield> = 'bla' where id = 64

krijg ik de foutmelding:
code:
1
ORA-01465: invalid hex number.

Hij lijkt mij dat je wel een varchar2 moet kunnen inserten in een blob field zonder specifieke typecasting ?

Iemand enig idee of (en hoe) dit kan?

  • P_de_B
  • Registratie: Juli 2003
  • Niet online
Ik ken Oracle niet goed, maar bij SQL server moet je met speciale functies werken bij BLOB velden. (WRITETEXT etc)

Kijk eens in de docs of dit bij Oracle ook zo is (weet het bijna wel zeker)

Oops! Google Chrome could not find www.rijks%20museum.nl


  • reddevil
  • Registratie: Februari 2001
  • Laatst online: 06-10-2025
er is wel een system package dbms_lob, maar als je daarmee aan de haal gaat moet je of via andere blobs of via file lezen/schrijven en dat is niet een optie hier

  • P_de_B
  • Registratie: Juli 2003
  • Niet online
Google schijnt hier wel veel vanaf te weten. Is er iets bij dat op jou van toepassing is?

Oops! Google Chrome could not find www.rijks%20museum.nl


  • reddevil
  • Registratie: Februari 2001
  • Laatst online: 06-10-2025
Hrmz,

ik ben verder gaan snuffelen met jou link en nog wat gokwerk bij de system packages en heb dit gevonden

code:
1
2
update <table> set <blobfield> = utl_raw.cast_to_raw('bla')
where id = 64


blijkt dat het nog goed werkt ook

Merci en problem 1 solved ;)

[ Voor 8% gewijzigd door reddevil op 06-01-2004 15:46 ]


  • reddevil
  • Registratie: Februari 2001
  • Laatst online: 06-10-2025
Probleem 2 welke een kleine variatie van de eerste is:


code:
1
2
3
4
5
6
7
select <blobfield> into oVar
  from <table>
  where id = 64;

  exception
    when others then
      oVar := utl_raw.cast_to_raw('bla');


oVar is gedeclareerd als outvariabele met type blob. Wat ik nu dus wil is dat als er een exception optreedt (bv. om de simpele reden dat id 64 niet hoeft te bestaan) dat de oVar de waarde 'bla' krijgt. Echter accepteert de compiler dit niet:

code:
1
PLS-00382: expression is of wrong type


Op een of andere manier wilt hij hier dus niet autotypecasten van een raw -> blob.

Ideeen voor een oplossing?
Ik wil niet null returnen!!! (wegens een andere reden, waarmee ik jullie nu even niet zal vervelen :9 )

[ Voor 12% gewijzigd door reddevil op 06-01-2004 15:52 ]


Verwijderd

Is het niet handiger om in je functie een out-variabele mee te geven, bv p_error? Als die gevuld is dan heb je een errorsituatue. Moet je misschien je code wat omgooien maar het heeft wel voordelen.

Dus
code:
1
2
3
4
5
6
7
function testje( p_error out varchar2 ) return blob is
  select <blobfield> into oVar
  from <table>
  where id = 64;
exception
   when others then
      p_error := SQLERRM;


Mocht je de code niet willen wijzigen, de parser kent verschillen in het gebruik in pl/sql (dus var1 := function;) en embedded sql (select function from dual), denk hierbij aan DECODE. Misschien zit het daar in?

  • reddevil
  • Registratie: Februari 2001
  • Laatst online: 06-10-2025
Nee een outvar erbij is juist niet de bedoeling, omdat onze client niet zo opgezet is wegens veel andere redenen. We maken gebruik van de OTL lib die in principe de zaken met oracle afhandeld. Nu gaf deze problemen met empty_blobs, maar door wat kleine trucjes hebben we dit opgelost.

Ook instellingen in het project in Borland C++ Builder 6 gaf problemen (meelinken van dynamische debug libs, etc, irritant dus ja).

Ik d8 ik laat even weten dat het opgelost is. Merci beaucoup iig
Pagina: 1