Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1533 connectés 

  FORUM HardWare.fr
  Programmation
  PHP

  [PHP] oracle et paramètre de type date ( ou alors sysdate ;) )

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[PHP] oracle et paramètre de type date ( ou alors sysdate ;) )

n°1678149
bill_clint​on
nonon j'ai pas de stagiaire ..
Posté le 28-01-2008 à 19:16:19  profilanswer
 

salut !
 
j'ai un gros problème, j'ai un appel à une fonction oracle qui ne marche pas  :(  
après moult débogages j'ai enfin qualifié mon problème ;)
c'est une date qui n'arrive pas à passer à ma fonction
donc je me suis fait une fonction toute simple que j'appelle comme ca :

Code :
  1. $sqls = "declare result varchar2(40);\n";
  2.   $sqls .= "BEGIN\n";
  3.   $sqls .= " result := test_variable_out(:un, :deux, :trois, :quatre);\n";
  4.   $sqls .= "END;\n";


 
:deux est le paramètre qui doit être une date, tout les autres sont varchar2
:trois est un paramètre out ( un autre test ;) )
 
ensuite :
 

Code :
  1. $stmt = ociparse($con, $sqls);
  2. $un = "'1'";
  3. $deux = "'22-NOV-06'";
  4. $deux = "28-Janv-1999";
  5. $deux = "28-janv.-2008 05:38:35 PM";
  6. $trois = "";
  7. $quatre= "'3'";
  8. ocibindbyname($stmt, ":un", &$un, -1);
  9. ocibindbyname($stmt, ":deux", &$deux, -1);
  10. ocibindbyname($stmt, ":trois", &$trois, -1);
  11. ocibindbyname($stmt, ":quatre", &$quatre, -1);
  12. $rsResult = OCIExecute($stmt);
  13. if ($rsResult)
  14. {
  15.   //return $result;
  16. }
  17. else
  18. {
  19.   $e = oci_error($stmt);
  20.   echo htmlentities($e['message']);
  21.   echo '<pre>';
  22.   echo htmlentities($e['sqltext']);
  23.   printf("\n%" . ($e['offset'] + 1) . "s", "^" );
  24.   echo '</pre>';
  25.   OCIFreeStatement($stmt);
  26.   OCILogoff();}
  27. OCIFreeStatement($stmt);
  28. OCILogoff();


 
et voilà l'erreur que je recois : (comme on voit ci-dessus j'ai déjà essayé pas mal de format  :whistle: )
 
ORA-01841: (full) year must be between -4713 and +9999, and not be 0 ORA-06512: at line 3
 
 
une idée ?
en même temps, je préférerais quand même lui passer la fonction sysdate ..
 

mood
Publicité
Posté le 28-01-2008 à 19:16:19  profilanswer
 

n°1678189
Profil sup​primé
Posté le 28-01-2008 à 21:44:11  answer
 


 
Et si tu enlève le zéro devant le 6 à la date de deux de la ligne 3 ?


Message édité par Profil supprimé le 28-01-2008 à 21:44:28
n°1678192
olivthill
Posté le 28-01-2008 à 21:53:26  profilanswer
 

Ces encapsulations sont bien compliquées, une petite usine à gaz pour pas grand chose.
Que cache test_variable_out ? Un select, update, insert ?
Supposons que c'est un insert.
 
Essayer ceci :

$sqls = "insert into la_table(colonne_date, colonne_chaine)"
$sqls = $sqls . " values(sysdate, :un)"
$sqls = $sqls . " returning res into :result"
$stmt = ociparse($con, $sqls);
ocibindbyname($stmt, ":un", &$un, -1);
ocibindbyname($stmt, ":result", &$rsResult, -1);"

Ou

$deux = "28-01-1999";
$sqls = "insert into la_table(colonne_date, colonne_chaine)"
$sqls = $sqls . " values(to_date(:deux, 'dd-mm-yyyy'), :un)"
$sqls = $sqls . " returning res into :result"
$stmt = ociparse($con, $sqls);
ocibindbyname($stmt, ":un", &$un, -1);
ocibindbyname($stmt, ":deux", &$deux, -1);
ocibindbyname($stmt, ":result", &$rsResult, -1);"

Sur la page http://us.php.net/manual/en/function.ocibindbyname.php vous trouverez un exemple d'insertion de date.


Message édité par olivthill le 28-01-2008 à 21:54:37
n°1678472
bill_clint​on
nonon j'ai pas de stagiaire ..
Posté le 29-01-2008 à 13:18:05  profilanswer
 

salut !
 
merci pour les réponses ;)
 
jovalise -- ça peut paraître idiot mais j'avais déjà essayé ;)
 
olivthill -- test_variable_out c'est juste un test pour pouvoir passer une date à l'appel d'une fonction, ensuite la vrai fonction que je veux appeler fais des tonnes de trucs donc pas possible de remplacer par une seule requête
j'avais déjà essayé avec sysdate en paramêtre mais ca voulait pas fonctionner, il me disait que tout les params n'étaient pas bindés évidemment
 
mais le coup du to_date(:deux, 'dd-mm-yyyy') j'ai pas essayé, je teste ca dans l'après-midi ;)

Message cité 1 fois
Message édité par bill_clinton le 29-01-2008 à 13:20:44
n°1678570
skeye
Posté le 29-01-2008 à 15:38:45  profilanswer
 

bill_clinton a écrit :

le coup du to_date(:deux, 'dd-mm-yyyy') j'ai pas essayé, je teste ca dans l'après-midi ;)


c'est le plus simple pour manipuler des dates quand tu n'es pas sûr du format à utiliser...


---------------
Can't buy what I want because it's free -
n°1678734
bill_clint​on
nonon j'ai pas de stagiaire ..
Posté le 29-01-2008 à 20:27:04  profilanswer
 

re-salut !
 
j'ai finalement pris le to_date à mettre dans le sql :
 

Code :
  1. $sqls = "declare result varchar2(40);\n";
  2. $sqls .= "BEGIN\n";
  3. $sqls .= " result := test_variable_out(:un, to_date(:deux, 'dd-mm-yyyy'), :trois, :quatre);\n";
  4. $sqls .= "END;\n";
  5. $stmt = ociparse($con, $sqls);
  6. $un = "'1'";
  7. $deux = '28-01-2008';
  8. $trois = "''";
  9. $quatre= "'3'";
  10. ocibindbyname($stmt, ":un", &$un, -1);
  11. ocibindbyname($stmt, ":deux", &$deux, -1);
  12. ocibindbyname($stmt, ":trois", &$trois, -1);
  13. ocibindbyname($stmt, ":quatre", &$quatre, -1);


 
évidemment ca va pas être utilisé tel quel dans le code, j'ai un module d'accès aux données qui va s'en charger, donc je lui passerais juste les paramètres avec leurs types dans une collection et la fonction qui exécute les fonctions stockées se chargera ou non de mettre le to_date pour les valeur de paramètres concernés.
 
 
merci :)


Message édité par bill_clinton le 29-01-2008 à 20:46:11

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  PHP

  [PHP] oracle et paramètre de type date ( ou alors sysdate ;) )

 

Sujets relatifs
Sécurité physique d'application PHP[Résolu] [PHP][XML][PDF] Comment appeler FOP depuis une page PHP ?
Webmail en PHP[PHP] Problème avec exec() dont ret_val = -1
[PHP] Script Boutique simple sans caddie, pour occasions[Resolu] Equivalent de la commande unpack de PHP/Perl en Java
[PHP] conditions multiples dans un switch - problème de design pattern[XML / Flash / PHP] Insertion galerie Photoshop dans page web
[PHP] Nettoyage de texte[PHP] ftp_get taille limite de fichier à télécharger
Plus de sujets relatifs à : [PHP] oracle et paramètre de type date ( ou alors sysdate ;) )


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR