requete oracle -> requete sql ?

Eléphant du PHP | 335 Messages

27 juil. 2005, 09:28

Bonjour

Alors voila j'ai une requete que j'ai récupéré sur Oracle et je voudrais pouvoir l'éxécuter dans mon code php.

J'ai essayé de la modifier en conséquence mais rien a faire j'ai toujours un message d'erreur!

Voici le requete sans aucune modification:
SELECT DISTINCT 
       a.user_name
     , b.full_name
     , c.responsibility_name
     , to_char(d.start_time, 'DD-MON-YYYY HH24:MI:SS')
     , to_char(d.end_time, 'DD-MON-YYYY HH24:MI:SS')
     , f.name
FROM   fnd_user a
     , per_people_v7 b
     , fnd_responsibility_tl c
     , fnd_login_responsibilities d
     , fnd_logins e
     , v$database f
WHERE 
b.person_id (+) = a.employee_id
AND a.user_id = e.user_id
AND e.login_id = d.login_id
AND d.responsibility_id = c.responsibility_id
AND user_name ='valeur récupérer du user'
AND d.end_time is null
Qqn sait-il comment faire pour qu'elle s'éxécute?

Merci[/php]

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 13231 Messages

27 juil. 2005, 09:43

SELECT DISTINCT
       a.user_name
     , b.full_name
     , c.responsibility_name
     , to_char(d.start_time, 'DD-MON-YYYY HH24:MI:SS') //Je connais pas to_char
     , to_char(d.end_time, 'DD-MON-YYYY HH24:MI:SS')
     , f.name
FROM   fnd_user AS a
     , per_people_v7 AS b
     , fnd_responsibility_tl AS c
     , fnd_login_responsibilities AS d
     , fnd_logins AS e
     , v$database AS f
WHERE
b.person_id (+) = a.employee_id //C'est quoi le (+) ?
AND a.user_id = e.user_id
AND e.login_id = d.login_id
AND d.responsibility_id = c.responsibility_id
AND user_name ='valeur récupérer du user'
AND d.end_time is null
Connaître son ignorance est la meilleure part de la connaissance
Pour un code lisible : n'hésitez pas à sauter des lignes et indenter

twitter - site perso - Github - Zend Certified Engineer

Mammouth du PHP | 19672 Messages

27 juil. 2005, 10:08

À savoir : si ta requête normale s'exécute parfaitement bien sous Oracle, tu la copies et tu la colles directement entre guillemets dans ton PHP sans rien modifier ni adapter par rapport à PHP à une exception près : si ta requête contient elle-même des guillemets.

Donc tu copies et tu colles:
$sql = "SELECT... etc... ";
Si la requête comporte des guillemets, soit tu les échappes avec des "\" soit tu les transformes en apostrophes en faisant attention que ça ne vienne pas en conflit avec des apostraphoes existant aussi à l'origine.

Ensuite, il suffit d'utiliser la bonne fonction PHP pour l'exécuter après t'être connecté à serveur Oracle..
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

ViPHP
pjl
ViPHP | 2119 Messages

27 juil. 2005, 10:37

le (+) =, c'est une jointure externe mais cette écriture est dépréciée.

Eléphant du PHP | 335 Messages

27 juil. 2005, 10:54

Comment faire pour corriger le (+) ?

Merci

Eléphant du PHP | 335 Messages

27 juil. 2005, 11:16

Voici l'erreur que j'obtiens :
Warning: ociexecute(): OCIStmtExecute: ORA-00604: error occurred at recursive SQL level 1 ORA-06502: PL/SQL: numeric or value error: character string buffer too small ORA-06512: at line 8 ORA-00942: table or view does not exist

Toutes les tables que j'utilise existe et ma requete marche bien sous TOAD (oracle)!!

Qqn sait d'ou cette erreur provient ?

Merci

ViPHP
pjl
ViPHP | 2119 Messages

27 juil. 2005, 11:28

Le (+) = n'est pas une erreur, la preuve :
ma requete marche bien sous TOAD (oracle)!!

Eléphant du PHP | 335 Messages

27 juil. 2005, 11:36

Ou est l'erreur alors puisque ca fonctionne sous TOAD mais pas en PHP?

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 13231 Messages

27 juil. 2005, 11:37

Lit le message d'erreur
table or view does not exist
Il me semble que c'est clair, non ?
Connaître son ignorance est la meilleure part de la connaissance
Pour un code lisible : n'hésitez pas à sauter des lignes et indenter

twitter - site perso - Github - Zend Certified Engineer

Eléphant du PHP | 335 Messages

27 juil. 2005, 12:19

Toutes les tables que j'utilise existe et ma requete marche bien sous TOAD (oracle)!

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 13231 Messages

27 juil. 2005, 12:54

J'ai du penser trop vite :
quand tu fait une jointure, les SGBD créent des vues (c'est une sorte de table temporaire) dans laquelle est stockée le résultat de la jointure.

Si tu n'a pas les droits de créations de vue sur ta BdD, il est possible que la requête echoue.

Voilà ce que j'entendais !!! Je suis allé trop vite, sorry :oops:
Connaître son ignorance est la meilleure part de la connaissance
Pour un code lisible : n'hésitez pas à sauter des lignes et indenter

twitter - site perso - Github - Zend Certified Engineer

Eléphant du PHP | 335 Messages

27 juil. 2005, 17:22

Effectivement mon erreur vient de la, merci bcp Zeus pout ton explication.
$sql1 = 
"SELECT DISTINCT a.user_name FROM fnd_user a UNION
 SELECT DISTINCT c.responsibility_name FROM fnd_responsibility_tl c
 WHERE user_name ='ACHEVALIER'";
$sql2 = 
"SELECT DISTINCT a.user_name FROM fnd_user a 
 WHERE user_name ='ACHEVALIER'";
$sql3 = 
"SELECT DISTINCT c.responsibility_name FROM fnd_responsibility_tl c";
Lorsque j'execute $sql2 et $sql3, aucun probleme.
Mais lorsque j'execute $sql1 la j'ai un message d'erreur... :(

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 13231 Messages

27 juil. 2005, 17:25

Change les droits de l'utilisateurs et ajoute CREATE_VIEW
Connaître son ignorance est la meilleure part de la connaissance
Pour un code lisible : n'hésitez pas à sauter des lignes et indenter

twitter - site perso - Github - Zend Certified Engineer

Eléphant du PHP | 335 Messages

27 juil. 2005, 17:28

Change les droits de l'utilisateurs et ajoute CREATE_VIEW
J'ajoute CREATE_VIEW ou ca? Dans ma requete??

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 13231 Messages

27 juil. 2005, 17:35

Renseigne toi sur les requetes de modification de droits

il faut que tu t'identifie en tant qu'admin et que tu fasses un GRANT CREATE_VIEW ...

cherche de ce côté sur la doc SQL ou ORACLE
Connaître son ignorance est la meilleure part de la connaissance
Pour un code lisible : n'hésitez pas à sauter des lignes et indenter

twitter - site perso - Github - Zend Certified Engineer