Avatar billede kibeha Nybegynder
19. december 2000 - 10:08 Der er 3 kommentarer og
1 løsning

Problem med import af Image

Jeg har et problem med at få vores Oracle 8.1.6 på Windows NT til at importere billeder.

Jeg har udført følgende :
-------------------------------

-- DIRECTORY oprettet som bruger INTERNAL
CREATE OR REPLACE DIRECTORY TESTDIR AS \'F:\\test\';
GRANT READ ON DIRECTORY TESTDIR TO DAT;

-- Tabel oprettet som bruger DAT
CREATE TABLE TESTBILLEDER (
  BILLEDNAVN      VARCHAR2 (20),
  BILLEDE        ORDSYS.ORDIMAGE
)
  LOB (BILLEDE.SOURCE.LOCALDATA) STORE AS
    (TABLESPACE WEBDATA)
TABLESPACE WEBDATA;

-- Test-procedure oprettet som bruger DAT
CREATE OR REPLACE PROCEDURE TestImportBillede(BilledNavn IN VARCHAR2, FilNavn IN VARCHAR2) IS
  TestRowId  ROWID;
  Image      ORDSYS.ORDIMAGE;
  Ctx        RAW(4000) := NULL;
BEGIN
  INSERT INTO TESTBILLEDER VALUES (
      BilledNavn,
      ORDSYS.ORDIMAGE(
        ORDSYS.ORDSOURCE(
            EMPTY_BLOB(),
            \'file\',
            \'TESTDIR\',
            FilNavn,
            SYSDATE,
            1
        ),
        NULL,
        NULL,
        NULL,
        NULL,
        NULL,
        NULL,
        NULL
      )
  ) RETURNING TESTBILLEDER.ROWID INTO TestRowId;

  SELECT TESTBILLEDER.BILLEDE
    INTO Image
    FROM TESTBILLEDER
    WHERE TESTBILLEDER.ROWID = TestRowId
      FOR UPDATE;

  -- Output af detaljer for Image objektet
  DBMS_OUTPUT.PUT_LINE(Image.getSource());
  DBMS_OUTPUT.PUT_LINE(Image.getSourceType());
  DBMS_OUTPUT.PUT_LINE(Image.getSourceLocation());
  DBMS_OUTPUT.PUT_LINE(Image.getSourceName());

  -- Udfører import - det er her fejlen opstår !!
  Image.Import(Ctx);
  Image.SetProperties;

  UPDATE TESTBILLEDER
      SET TESTBILLEDER.BILLEDE = Image
    WHERE TESTBILLEDER.ROWID = TestRowId;

  COMMIT;
END TestImportBillede;

-- Procedure testet som bruger DAT
BEGIN
  TestImportBillede(\'Stregkode\',\'barcode.gif\');
END;

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

Det ovenstående kald til TestImportBillede giver følgende DBMS Output :

file://TESTDIR/BARCODE.GIF
file
TESTDIR
BARCODE.GIF

Og følgende fejlkode opstår ved: Image.Import(Ctx) :

ORA-28575: unable to open RPC connection to external procedure agent
ORA-06512: at \"ORDSYS.ORDIMG_PKG\", line 420
ORA-06512: at \"ORDSYS.ORDIMAGE\", line 25
ORA-06512: at \"ORDSYS.ORDIMG_PKG\", line 498
ORA-06512: at \"ORDSYS.ORDIMAGE\", line 169
ORA-06512: at \"DAT.TESTIMPORTBILLEDE\", line 38
ORA-06512: at line 1

Jeg fik den idé ved at se at Image.getSource() var \'file://TESTDIR/BARCODE.GIF\', at stien, som TESTDIR var oprettet med måske blev substitueret ind i den streng. Ved at eksperimentere på NT-maskinen fandt jeg ud af, at det der skulle være i strengen på TESTDIR\'s plads, var \'/F:/test\', så vidt jeg kunne se. Så det prøvede jeg at ændre directoryet til :

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

-- DIRECTORY ændret som bruger INTERNAL
CREATE OR REPLACE DIRECTORY TESTDIR AS \'/F:/test\';

-- Procedure testet som bruger DAT
BEGIN
  TestImportBillede(\'Stregkode\',\'barcode.gif\');
END;

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

Det nye kald til TestImportBillede giver følgende DBMS Output (det samme som før) :

file://TESTDIR/BARCODE.GIF
file
TESTDIR
BARCODE.GIF

Men fejlkoden bliver nu til en helt anden :

ORA-06510: PL/SQL: unhandled user-defined exception
ORA-06512: at \"ORDSYS.ORDSOURCE\", line 179
ORA-22288: file or LOB operation FILEOPEN failed
The device does not recognize the command.
ORA-06512: at \"ORDSYS.ORDIMG_PKG\", line 484
ORA-06512: at \"ORDSYS.ORDIMAGE\", line 169
ORA-06512: at \"DAT.TESTIMPORTBILLEDE\", line 38
ORA-06512: at line 1


Nogen gode idéer ???
Avatar billede driften.dk Nybegynder
19. december 2000 - 11:50 #1
Nu er jeg godt nok ikke nogen ørn til NT, men Oracle fortæller dig sådan set at den ikke kan få fat i en extern procedure, dvs. et program på NT-boksen.
Det mest typiske (baseret bla. på egne fejl) er manglen på extproc i SQL*Net listeneren til RPC. Uden den kan eksterne processer ikke startes.
Definér den og genstart din listener og prøv igen. Har du allerede gjort det, må du jo vende tilbage.

:))
Avatar billede kibeha Nybegynder
19. december 2000 - 12:33 #2
Tak for hintet, driften.

Jeg havde faktisk extproc defineret i min listener.ora, men der manglede extproc_connection_data i tnsnames.ora !

Så det fik mig videre - men nu får jeg en ny fejl :

ORA-06520: PL/SQL: Error loading external library
ORA-06522: Unable to load DLL
ORA-06512: at \"ORDSYS.ORDIMG_PKG\", line 420
ORA-06512: at \"ORDSYS.ORDIMAGE\", line 25
ORA-06512: at \"ORDSYS.ORDIMG_PKG\", line 498
ORA-06512: at \"ORDSYS.ORDIMAGE\", line 169
ORA-06512: at \"DAT.TESTIMPORTBILLEDE\", line 38
ORA-06512: at line 1


Du skal nok få point, driften, for det var helt fint svar på mit oprindelige spørgsmål, men jeg lader lige stå åben lidt for om der er nogen der kan klare den nye fejl - jeg kan ikke se jeg mangler noget. Så øger jeg pointene og deler dem mellem dig og hvem der nu løser min nye fejl. Ok?

Avatar billede kibeha Nybegynder
19. december 2000 - 12:48 #3
Jeg har nu fundet ud af, at der åbenbart er noget galt i min installation, for følgende sætning udføres helt perfekt :

BEGIN
  DBMS_OUTPUT.PUT_LINE(TO_CHAR(DBMS_LOB.FILEEXISTS(BFILENAME(\'TESTDIR\',\'BARCODE.GIF\'))));
END;

Dvs. at det må være dll-filerne til ORDSYS objekterne, der mangler. Det må jeg kunne finde ud af ...

Så derfor lukker jeg nu spørgsmålet med tak for hjælpen - det hjælper ofte lige at få nogle andre til at kigge på et problem, så får man lige et hint der hjælper en videre.
Avatar billede driften.dk Nybegynder
19. december 2000 - 12:50 #4
Kun glad for at kunne hjælpe.

:))))
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Computerworld tilbyder specialiserede kurser i database-management

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester