Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> Wywołanie funkcji w PHP, wywołanie funkcji pl/sql z php
polnik@studio
post 9.12.2005, 16:42:34
Post #1





Grupa: Zarejestrowani
Postów: 6
Pomógł: 0
Dołączył: 1.12.2005

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


Mam oto taką funkcję :

  1. FUNCTION ekp_api_intranet.limit_pozostaly(
  2. p_prc_id NUMBER, --identyfikator pracownika
  3. p_rda_id NUMBER, --identyfikator rodzaju absencji
  4. p_dzien DATE, --dzień na który sprawdzamy wymiar
  5. po_godziny OUT NUMBER, --zwracana ilość godzin pozostałych do wykorzystania
  6. po_dni OUT NUMBER, --zwracana ilość dni pozostałych do wykorzystania
  7. po_blad OUT VARCHAR2 --zwracany opis błędu, w przypadku niepowodzenia
  8. )
  9. RETURN NUMBER;


i chciałbym aby można było ją wywołać w php

robie coś takiego :
  1. <?php
  2.  
  3. $cmdstr = "SELECT ekp_api_intranet.limit_pozostaly(:p_prc_id, :p_rda_id , :p_dzien) v_godziny FROM dual";
  4. echo "Connection is " . $db_conn;
  5. echo '<br>';
  6.  
  7. $stmt = OCIParse($db_conn, $cmdstr) or die ('Can not parse query');
  8.  
  9. OCIBindByName($stmt,":p_prc_id", $pracownik_spr, 200) or die ('Can not bind variable');
  10. OCIBindByName($stmt,":p_rda_id", $rodzaj_urlopu_spr, 200) or die ('Can not bind variable');
  11. OCIBindByName($stmt,":p_dzien", $data_teraz, 200) or die ('Can not bind variable');
  12.  
  13.  OCIExecute($stmt) or die ('Can not Execute statment');
  14.  
  15. while (ocifetch($stmt)){ $_friends=ociresult($stmt,"v_godziny"); }
  16.  
  17. ?>


niestety otrzymuję komunikat :

Cytat
Warning: ociexecute(): OCIStmtExecute: ORA-06553: PLS-306: wrong number or types of arguments in call to 'LIMIT_POZOSTALY'


w czym może być probem sad.gif

Proszę o pomoc

pozdrawiam Krzysiek
Go to the top of the page
+Quote Post
nospor
post 9.12.2005, 16:51:38
Post #2





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




ja tam znawca fukcji w oraclu nie jestem, ale jak wol widze ze masz funkcje z 6 paramatrami, a wywolujesz ją tylko z 3. Nawet komunikat o bledzie ci to sygnalizuje


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

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
polnik@studio
post 9.12.2005, 16:59:16
Post #3





Grupa: Zarejestrowani
Postów: 6
Pomógł: 0
Dołączył: 1.12.2005

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


oki

dodałem te 3 pozostałe w ten sposób :

  1. <?php
  2.  
  3. $cmdstr = "SELECT ekp_api_intranet.limit_pozostaly(:p_prc_id, :p_rda_id , :p_dzien, :v_godziny OUT, :v_dni OUT, :v_blad OUT) FROM dual";
  4. echo "Connection is " . $db_conn;
  5. echo '<br>';
  6.  
  7. $stmt = OCIParse($db_conn, $cmdstr) or die ('Can not parse query');
  8.  
  9. OCIBindByName($stmt,":p_prc_id", $pracownik_spr, 200) or die ('Can not bind variable');
  10. OCIBindByName($stmt,":p_rda_id", $rodzaj_urlopu_spr, 200) or die ('Can not bind variable');
  11. OCIBindByName($stmt,":p_dzien", $data_teraz, 200) or die ('Can not bind variable');
  12.  
  13.  
  14. OCIBindByName($stmt,":v_godziny", $wynik1, 200) or die ('Can not bind variable');
  15. OCIBindByName($stmt,":v_dni", $wynik2, 200) or die ('Can not bind variable');
  16. OCIBindByName($stmt,":v_blad", $wynik3, 200) or die ('Can not bind variable');
  17.  
  18.  
  19. OCIExecute($stmt) or die ('Can not Execute statment');
  20.  
  21. while (ocifetch($stmt)){
  22. $_friends=ociresult($stmt,"v_godziny");
  23. }
  24.  
  25. ?>


i otrzymuję komunikat :

Cytat
Warning: ociexecute(): OCIStmtExecute: ORA-00907: missing right parenthesis


domyślam się, że brakuje jakiś parametrów. Niestety nie mam pojęcia jakich.

pozdrawiam serdecznie
Krzysiek
Go to the top of the page
+Quote Post
dr_bonzo
post 9.12.2005, 17:35:37
Post #4





Grupa: Przyjaciele php.pl
Postów: 5 724
Pomógł: 259
Dołączył: 13.04.2004
Skąd: N/A

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


Nawias nie parametr - w raazie watpliwosci uzyj slownika en->pl.


--------------------
Nie lubię jednorożców.
Go to the top of the page
+Quote Post
polnik@studio
post 9.12.2005, 17:45:17
Post #5





Grupa: Zarejestrowani
Postów: 6
Pomógł: 0
Dołączył: 1.12.2005

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


teraz po wykonaniu tego :

  1. <?php
  2.  
  3. $cmdstr = "SELECT ekp_api_intranet.limit_pozostaly(:p_prc_id, :p_rda_id , :p_dzien, :po_godziny , :po_dni, :po_blad) FROM dual";
  4. echo "Connection is " . $db_conn;
  5. echo '<br>';
  6.  
  7. $stmt = OCIParse($db_conn, $cmdstr) or die ('Can not parse query');
  8.  
  9. OCIBindByName($stmt,":p_prc_id", $pracownik_spr, 200) or die ('Can not bind variable');
  10. OCIBindByName($stmt,":p_rda_id", $rodzaj_urlopu_spr, 200) or die ('Can not bind variable');
  11. OCIBindByName($stmt,":p_dzien", $data_teraz, 200) or die ('Can not bind variable');
  12.  
  13. OCIBindByName($stmt,"po_godziny", $wynik1, 200) or die ('Can not bind variable');
  14. OCIBindByName($stmt,"po_dni", $wynik2, 200) or die ('Can not bind variable');
  15. OCIBindByName($stmt,"po_blad", $wynik3, 4000) or die ('Can not bind variable');
  16.  
  17. OCIExecute($stmt) or die ('Can not Execute statment');
  18.  
  19. ?>


zwraca mi komunikat :

Cytat
Warning: ociexecute(): OCIStmtExecute: ORA-06572: Function LIMIT_POZOSTALY has out arguments



sad.gif

pozdrawiam serdecznie Krzysiek


EDIT :

już sobie poradziłem smile.gif

dla zainteresowanych smile.gif

  1. <?php
  2.  
  3. $s = OCIParse($db_conn, "begin :result := ekp_api_intranet.limit_pozostaly(:p_prc_id, :p_rda_id , to_date(:p_dzien,'ddmmyyyy'), :po_godziny, :po_dni, :po_blad); end;");
  4. OCIBindByName($s, ":p_prc_id", $in_var);
  5. OCIBindByName($s, ":p_rda_id", $in_var2);
  6. OCIBindByName($s, ":p_dzien", $data_sprawdzenia);
  7. OCIBindByName($s, ":po_godziny", $out_var1, 50); // 50 długość zwracanej danej
  8. OCIBindByName($s, ":po_dni", $out_var2, 50); // 50 długość zwracanej danej
  9. OCIBindByName($s, ":po_blad", $out_var3, 50); // 50 długość zwracanej danej
  10. OCIBindByName($s, ":result", $out_var4, 4000); // 4000 długość zwracanej danej
  11.  
  12. OCIExecute($s, OCI_DEFAULT);
  13. echo "Ilość godzin: " . $out_var1 ."<BR>";
  14. echo "Ilość dni: " . $out_var2 ."<BR>";
  15. echo "Błąd: " . $out_var3 ."<BR>";
  16.  
  17. ?>


pozdrawiam Krzysiek

Ten post edytował polnik@studio 10.12.2005, 13:16:45
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: 14.06.2025 - 19:17