Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> wywołanie zewnetrznej procedury, ORA-28595
ktosnowy2
post
Post #1





Grupa: Zarejestrowani
Postów: 3
Pomógł: 0
Dołączył: 25.11.2009

Ostrzeżenie: (0%)
-----


Witam,



Tworzę bibliotekę w środowisku Oracle:

  1. CREATE OR REPLACE LIBRARY PROC_INW_LIB IS
  2.  
  3. 'C:\dev-cpp\proc_inwersja.so';


Definiuję procedurę wywołującą program zewnętrzny:


  1. CREATE OR REPLACE PROCEDURE proc_inwersja (
  2. buff IN OUT RAW,
  3. first IN DOUBLE PRECISION,
  4. wymiarX IN DOUBLE PRECISION,
  5. wymiarY IN DOUBLE PRECISION,
  6. bit IN DOUBLE PRECISION
  7. ) AS
  8.  
  9. EXTERNAL NAME "inwersja"
  10. LIBRARY "PROC_INW_LIB"
  11. LANGUAGE C
  12. PARAMETERS ( buff BY reference,
  13. buff LENGTH long,
  14. first BY reference,
  15. wymiarX BY reference,
  16. wymiarY BY reference,
  17. bit BY reference);
  18.  
  19. /


Powyższą procedurę wywoluje ta procedura w linii 37:

  1. CREATE OR REPLACE PROCEDURE proc_inw
  2. IS
  3. b_loc blob;
  4. l_bfile BFILE;
  5. length DOUBLE PRECISION;
  6. Pieces INTEGER;
  7. Buffer RAW(32766);
  8. Amount BINARY_INTEGER := 32766;
  9. Position INTEGER := 1;
  10. First DOUBLE PRECISION := 1;
  11. --dlugosc DOUBLE PRECISION;
  12. wymiarX DOUBLE PRECISION:=1024;
  13. wymiarY DOUBLE PRECISION:=768;
  14. bit DOUBLE PRECISION:=1;
  15. begin
  16. DBMS_LOB.createtemporary (lob_loc => b_loc ,
  17. cache => TRUE,
  18. dur => DBMS_LOB.call);
  19. l_bfile := bfilename('TEST_DIR', 'obraz3.bmp');
  20. IF DBMS_LOB.FILEEXISTS( l_bfile ) = 1 then
  21. dbms_output.put_line( 'Exists!');
  22. else
  23. dbms_output.put_line( 'Not Exists!');
  24. end IF;
  25. length := dbms_lob.getlength (l_bfile);
  26. dbms_output.put_line('length='||length);
  27. SELECT foto INTO b_loc FROM foto2
  28. WHERE o_id = 1 AND f_id = 1 FOR UPDATE;
  29. DBMS_LOB.OPEN (b_loc, DBMS_LOB.LOB_READWRITE);
  30. Pieces := floor((length ) / 32766) + 1;
  31. dbms_output.put_line('pieces='||Pieces);
  32. FOR i IN 1..Pieces LOOP
  33. dbms_output.put_line('i='||i);
  34. DBMS_LOB.READ(b_loc,Amount,Position,Buffer);
  35. dbms_output.put_line('Amount='||Amount);
  36. dbms_output.put_line('Position='||Position);
  37. proc_inwersja(Buffer,First,wymiarX,wymiarY,bit);
  38. DBMS_LOB.WRITE (b_loc, Amount, Position, Buffer);
  39. Position := Position + Amount;
  40. First := 0;
  41. END LOOP;
  42. DBMS_LOB.CLOSE (b_loc);
  43. /*EXCEPTION
  44.   WHEN OTHERS THEN
  45.   DBMS_OUTPUT.PUT_LINE('Błąd wykonywania');*/
  46. END;
  47. /


Wywołuję procedurę:

exec proc_inw;

Błąd:

ORA-28595: Agent procesu zewnetrznego: niepoprawna sciezka
ORA-06512: przy "SYSTEM.PROC_INWERSJA", linia 1
ORA-06512: przy "SYSTEM.PROC_INW", linia 37
ORA-06512: przy linia 1



ORA-28575
This error indicates that the database couldn't either establish a connection to the external
procedure listener or that the external procedure listener was unable to execute extproc.

Jak pozbyć się tego błędu?


Mój listener.ora:

  1. # listener.ora Network Configuration File: C:\app\marcin\product\11.1.0\db_9\NETWORK\ADMIN\listener.ora
  2. # Generated by Oracle configuration tools.
  3.  
  4.  
  5. SID_LIST_LISTENER =
  6. (SID_LIST =
  7. (SID_DESC =
  8. (SID_NAME = ORA816)
  9. (ORACLE_HOME = C:\app\marcin\product\11.1.0\db_9)
  10. )
  11. (SID_DESC =
  12. (PROGRAM = extproc)
  13. (SID_NAME = PLSExtProc)
  14. (ORACLE_HOME = C:\app\marcin\product\11.1.0\db_9)
  15. (PROGRAM = extproc)
  16. (ENVS = "EXTPROC_DLLS= C:\Dev-Cpp\proc_inwersja.so")
  17. )
  18. )
  19.  
  20. CONNECT_TIMEOUT_LISTENER_PROC = 10
  21.  
  22. TRACE_LEVEL_LISTENER_PROC = OFF
  23.  
  24. STARTUP_WAIT_TIME_LISTENER_PROC = 0
  25.  
  26. LISTENER =
  27. (DESCRIPTION_LIST =
  28. (DESCRIPTION =
  29. (ADDRESS = (PROTOCOL = TCP)(HOST = marcin-PC)(PORT = 1521))
  30. )
  31. (DESCRIPTION =
  32. (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521))
  33. )
  34. )


Tsnames.ora:


  1. # tnsnames.ora Network Configuration File: C:\app\marcin\product\11.1.0\db_9\network\admin\tnsnames.ora
  2. # Generated by Oracle configuration tools.
  3.  
  4. ORCL8 =
  5. (DESCRIPTION =
  6. (ADDRESS_LIST = (PROTOCOL = TCP)(HOST = marcin-PC)(PORT = 1521))
  7. (CONNECT_DATA =
  8. (SERVER = DEDICATED)
  9. (SERVICE_NAME = orcl8)
  10. )
  11. )


Go to the top of the page
+Quote Post

Posty w temacie


Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 23.08.2025 - 16:51