Le forum (ô combien francophone) des utilisateurs de Powerbuilder.
Bonjour,
Sous PB 10.5 avec une base Oracle 10.1.0.2 gros soucis avec les procédures stockées. Impossible d'en faire fonctionner une seule.
La connection avec la base Oracle se fait avec JDBC.
Voici ma procédure stockée
CREATE OR REPLACE PROCEDURE STEMATCH.proc_add_to_invest IS toto NUMBER; BEGIN SELECT invest_sn INTO toto FROM tb_investigation WHERE invest_sn = 312; END proc_add_to_invest; /
et voici mon appel dans powerbuilder, je me suis basé sur un article et une demande de mreminiac trouvée dans le forum
String monSql; monSql = "EXEC STEMATCH.proc_add_to_invest"; DECLARE maProc DYNAMIC PROCEDURE FOR SQLSA; PREPARE SQLSA FROM :monSql; EXECUTE DYNAMIC MaProc;
et à chaque fois j'ai une erreur SQLState = 42000 et SQLcode = 900. Autrement dit "Syntax Error" d'après notre bible d'erreur Oracle.
je ne vois pas où... j'ai changé la requete pour ceci avec le même effet
CREATE OR REPLACE PROCEDURE STEMATCH.proc_add_to_invest IS BEGIN COMMIT; -- puis sans le commit avec uniquement -- DBMS_output.line( 'Coucou'); END proc_add_to_invest; /
merci encore pour l'aide
Hors ligne
Tu utilise la version professionnal ou enterprise de PB ?
Hors ligne
enterprise dire que je pensais avoir été complet
Hors ligne
hello,
tu as le détail de ton message d'erreur ? le 42000... apparement, tu peux avoir plusieurs type d'erreur...
et le message te decrirait le probleme...
a+++
Hors ligne
le message issu de SQLCA (sqlerrtext) est "invalid sql statement" (code erreur 900).
Hors ligne
la proc fonctionne depuis Oracle ? ou Sql Toad ? un truc comme ca...
tu as mis les droits d'accès pour tous pour ta proc ?
si oui...
alors, essayes de faire l'appel de la proc depuis powerbuilder, en version normale, pas en dynamic.
tu dois envoyer un parametre ?
a++
Hors ligne
Essaye de déclarer un paramètre (qui ne sert à rien) dans ta procédure, je crois avoir déja eu un problème de ce genre avec PB8.
Hors ligne
effectivement depuis TOAD... depuis SQL plus ca marche aussi très bien cette procédure (vu ce qu'il en reste )
cette procédure doit avoir des paramètres c'est pour cela que je l'appelle en dynamique.
un paramètre dans l'appel de la procédure ? et j'en fais quoi de ce paramètre ?
Hors ligne
ce que je veux dire, tu declares comme ceci depuis pb :
boolean lb_autocommit lb_autocommit = sqlca.autocommit sqlca.autocommit = false DECLARE proc_toto PROCEDURE FOR STEMATCH.proc_add_to_invest @ton_parametre = :valeur du parametre; EXECUTE proc_toto ; IF SQLCA.sqlcode = 0 THEN FETCH proc_toto INTO :li_valeur_recupere; END IF CLOSE proc_toto ; sqlca.autcommit = lb_autocommit
Au fait, c'est quoi STEMATCH. ?
Hors ligne
pick ouic a écrit:
Au fait, c'est quoi STEMATCH. ?
au hasard, le nom d'un package ??
Hors ligne
je pense aussi ^^
Hors ligne
oui c'est un package, de toute manière on a mis des alias partout pour ne pas le trimbaler
bon ca passe à mon grand étonnement sans la variable ! Merci encore pour ce Grand premier pas...
mais avec la variable j'ai le droit dans PB à une erreur par le compilateur
"Database SQL Error -201 : A Syntax Error has occured." le pointeur de PB sur le @ ?
Hors ligne
aubierf a écrit:
oui c'est un package, de toute manière on a mis des alias partout pour ne pas le trimbaler
bon ca passe à mon grand étonnement sans la variable ! Merci encore pour ce Grand premier pas...
mais avec la variable j'ai le droit dans PB à une erreur par le compilateur
"Database SQL Error -201 : A Syntax Error has occured." le pointeur de PB sur le @ ?
si ta variable s'appelle @toto dans ta proc,
il faut que tu l'appelles de la meme facon depuis pb :
@toto= :valeur du parametre;
Hors ligne
c'est bien ce que je fais !! et ca marche bien !!!
dire que je l'avais fait hier mais j'ai eu peur de l'erreur PB et j'ai tenté une autre approche (par le dynamique)
Hors ligne
aubierf a écrit:
c'est bien ce que je fais !! et ca marche bien !!!
dire que je l'avais fait hier mais j'ai eu peur de l'erreur PB et j'ai tenté une autre approche (par le dynamique)
Finalement, c'est résolu ? (je commence à m'y perdre moi...)
Hors ligne
on dirait oui vas y pick fais toi plaisir :D
Hors ligne
disons que j'ai tout de même une affreuse erreur PB même si j'avoue que ca marche
Hors ligne
c'est quoi l'erreur ?
c'est lié suite à l'appel de ta proc ?
ou c'est autre chose ?
il y a une image de ton erreur ?
Hors ligne
pick ouic a écrit:
ce que je veux dire, tu declares comme ceci depuis pb :
Code: pb
boolean lb_autocommit lb_autocommit = sqlca.autocommit sqlca.autocommit = false DECLARE proc_toto PROCEDURE FOR STEMATCH.proc_add_to_invest @ton_parametre = :valeur du parametre; EXECUTE proc_toto ; IF SQLCA.sqlcode = 0 THEN FETCH proc_toto INTO :li_valeur_recupere; END IF CLOSE proc_toto ; sqlca.autcommit = lb_autocommit
Au fait, c'est quoi STEMATCH. ?
bien sur mais comment je peux t'envoyer une image ? Merci encore pour le temps passé sur mon (mes) problème(s) ) _:
Avec ton code contenant la variable, le curseur de PB s'arrete au @ de @toto= :valeur du parametre;
et j'ai le message "Database SQL Error -201 : A Syntax Error has occured." et pourtant j'ai bien appellé du même nom mon paramètre dans la procédure stockée.
Hors ligne
aubierf a écrit:
enterprise dire que je pensais avoir été complet
Alors utilise le driver natif, au lieu de jdbc.
Probablement pas la source de ton ereur, masi ça élimine une erreur possible
Hors ligne
pick ouic a écrit:
aubierf a écrit:
oui c'est un package, de toute manière on a mis des alias partout pour ne pas le trimbaler
bon ca passe à mon grand étonnement sans la variable ! Merci encore pour ce Grand premier pas...
mais avec la variable j'ai le droit dans PB à une erreur par le compilateur
"Database SQL Error -201 : A Syntax Error has occured." le pointeur de PB sur le @ ?si ta variable s'appelle @toto dans ta proc,
il faut que tu l'appelles de la meme facon depuis pb :@toto= :valeur du parametre;
si c'est du output...
DECLARE d_toto PROCEDURE FOR sp_toto @toto = :li_result OUTPUT USING sqlca;
Hors ligne
j'ai bien tenté avec le driver natif ( en fait mes premiers tests étaient fait avec le natif et on m'a conseillé le jdbc) et aussi de mettre OUTPUT ou INPUT à la fin de ma ligne "@toto = :li_var" mais sans succès. Toujours la même erreur sur le "@"....
j'ai retenté de changer la commande de mettre le paramètre entre parenthèse, changer le nom de la variable, enlevé le "@" et si le compilateur passe malheureusement j'ai à nouveau l'impossibilité d'exécuter ma procédure stockée.
Hors ligne
ce serait un BUG lié avec ta version de pb10.5 ?
Si quelqu'un peut confirmer cela ? merci d'avance.
Hors ligne
je viens de tester sur la PB 8.0.3, la 10.0 et la 10.5 et à chaque fois j'ai une erreur à la compil
C'est bien ca qu'il faut écrire ????
DECLARE proc_toto PROCEDURE FOR proc_add_to_invest @maVar = 312; EXECUTE proc_toto ; CLOSE proc_toto;
Hors ligne
aubierf a écrit:
je viens de tester sur la PB 8.0.3, la 10.0 et la 10.5 et à chaque fois j'ai une erreur à la compil
C'est bien ca qu'il faut écrire ????Code: mssql
DECLARE proc_toto PROCEDURE FOR proc_add_to_invest @maVar = 312; EXECUTE proc_toto ; CLOSE proc_toto;
oui, c'est bien ca !
@maVar est bien nommé comme ca dans ta proc ?
délireeeeeeeee
Hors ligne