Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> wywołanie zewnetrznej procedury, ORA-28595
ktosnowy2
post 5.01.2010, 16:47:09
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
IP!
post 9.01.2010, 19:21:01
Post #2





Grupa: Zarejestrowani
Postów: 21
Pomógł: 1
Dołączył: 21.10.2008

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


Nie mam teraz dostępu do środowiska aby to reprodukować, ale...

1. Usługa została zrestarowana po zmianie konfigu, prawda?
2. DLL zamiast SO?
3. Ta ścieżka może być wrażliwa na wielkość znaków nawet na Windows, była kiedyś taka niespodzianka.
4. Problem ze znakami '\' ?
5. Nie jesteś zalogowany jako SYS lub SYSTEM, prawda?

Ten post edytował IP! 9.01.2010, 19:22:57
Go to the top of the page
+Quote Post
ktosnowy2
post 16.01.2010, 13:04:43
Post #3





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

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


1. Tak
2. Próbowałem, bez zmian.
3. Zwróciłem uwage na znaki, bez zmian.
4. Co masz na myśli?
5. Faktycznie byłem zalogowany jako system, ale zrobilem to wszystko na innym koncie i efekt bez zmian.

Jakieś inne pomysły?
Go to the top of the page
+Quote Post
goszczu
post 19.01.2010, 10:28:59
Post #4





Grupa: Zarejestrowani
Postów: 5
Pomógł: 0
Dołączył: 12.11.2006
Skąd: Łodź

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


Nie jestem pewien, ale z komunikatu błędu wnioskuję, że w pliku tnsnames.ora może brakować wpisu
umożliwiającego wywołanie zdalnej procedury. Powinno to wyglądać mniej więcej tak:


  1. EXTPROC_CONNECTION_DATA =
  2. (DESCRIPTION =
  3. (ADDRESS_LIST =
  4. (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1))
  5. )
  6. (CONNECT_DATA =
  7. (SID = PLSExtProc)
  8. (PRESENTATION = RO)
  9. )
  10. )


Ten post edytował goszczu 19.01.2010, 10:34:52
Go to the top of the page
+Quote Post
ktosnowy2
post 20.01.2010, 17:04:38
Post #5





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

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


Też to nic nie zmienia.
Miałem taki ten wpis już wcześniej, ale potem generowałem te pliki automatycznie i zniknął. W każdym razie też nie działa, bez zmian.
Go to the top of the page
+Quote Post

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

 



RSS Wersja Lo-Fi Aktualny czas: 24.07.2025 - 17:12