Le forum (ô combien francophone) des utilisateurs de Powerbuilder.
Bonjour à tous,
Je reviens faire un petit tour par ici (je me fais de plus en plus absent, bouhhhh c'est pas bien !!) car j'ai de nouveau besoin de votre aide.
Nous venons de découvrir avec nos collègues les procédures stockées.
Le seul hic est qu'on ne sait pas comment ca fonctionne.
On utilise PB 6.5 et Informix 7.
Sous dbaccess, on arrive à créer une procédure...et à partir de là...trou noir.
Nous avons essayer de la créer dans le painter de PB mais ca ne fonctionne pas.
Quelqu'un aurait-il des infos sur les procédures stockées pour nous aider ?
Merci beaucoup pour votre aide
Hors ligne
Bonjour, une fois la proc créée, dans PB tu peux alimenter un DW avec ou la déclarer dans un script pour l'appeler.
Hors ligne
oui et ?
En fait mes questions sont :
* comment fait-on pour déclarer une procédure dans l'appli ?
* comment la déclarer ?
Désolé mais on n'y connait vraiment rien du tout.
J'ai fait des recherches sur le net et le forum...mais je n'ai rien trouvé qui aurait pu m'éclairer "simplement"
Hors ligne
Sans vouloir te froisser, la première chose à consulter est... l'aide PB. (je t'épargne le smiley F1 )
Bon, j'ai pas la version 6.5 donc je ne sais pas si c'est pareil que :
Informix DECLARE and EXECUTE
PowerBuilder requires a declarative statement to identify the database stored procedure that is being used and specify a logical name. The logical name is used to reference the procedure in subsequent SQL statements. The general syntax for declaring a procedure is:
DECLARE logical_procedure_name PROCEDURE FOR
Informix_procedure_name
({:arg1,:arg2 , ...})
{USING transaction_object};
where logical_procedure_name can be any valid PowerScript identifier and Informix_procedure_name is the name of the stored procedure in the INFORMIX database. The parentheses after Informix_procedure_name are required even if the procedure has no parameters.
Creating a stored procedure
The default SQL terminator character for the Database painter is a semicolon (;). Informix also uses a semicolon in its stored procedure syntax. Therefore, to create a stored procedure in the Database painter, you must change the SQL terminator character to something other than a semicolon, such as a backquote (`).
To change the Database painter's SQL terminator character, type the character you want in the SQL Terminator Character box in the Database Preferences dialog box.
The parameter references can take the form of any valid parameter string that INFORMIX accepts. PowerBuilder does not inspect the parameter list format except for purposes of variable substitution. The USING clause is required only if you are using a transaction object other than the default transaction object (SQLCA).
Example
Assume a stored procedure proc1 is defined as:
CREATE PROCEDURE proc1 AS
SELECT emp_name FROM employee
To declare that procedure for processing within PowerBuilder, enter:
DECLARE emp_proc PROCEDURE FOR proc1;
Note that this declaration is a nonexecutable statement, just like a cursor declaration. Where cursors have an OPEN statement, procedures have an EXECUTE statement.
When an EXECUTE statement is executed, the procedure is invoked. The EXECUTE refers to the logical procedure name:
EXECUTE emp_proc;
Issuing EXECUTE statements
Use PowerBuilder embedded SQL syntax when you enter an embedded EXECUTE statement in a script; do not enter the PROCEDURE keyword. Use this syntax:
EXECUTE procedure_name ;
You specify the EXECUTE statement the same way regardless of whether a stored procedure takes arguments. The arguments used in the DECLARE statement get passed automatically, without your having to state them in the EXECUTE statement.
Hors ligne
PB 6.5, c'est une très vieille version. Vous utilisez quelle version de Windows ? 98 ou NT4 ?
Pensez à migrer.
Pour un select, tu crée ta datawindow, à partir de la proc stock.
Mais pour les insert, update, delete, le support des procs stock n'est pas natif, il faut utiliser le sqlPreview de la datawindow
Hors ligne
@ erasorz : j'avais déjà regardé l'aide de PB. Mais quand je veux créer ma procédure dans le painter, ca me met qu'il y a une erreur : SQL 201 : a syntax error as occured alors que ma procédure est toute bete (create procedure ste as select codes from societe)
@shahin : tu prêches un convaincu concernant la vestuté de cette version...mais le boss n'est visiblement pas d'accord pour qu'on migre...ou alors il faudrait lui prouver que les applis PB 6.5 et PB12 peuvent cohabiter (une histoire de runtime...ou du genre)
On manque cruellement de formation sur PB...si seulement on pouvait avoir des formations...:'(
Hors ligne
Ah, j'avais pas bien saisi... Tu veux créer la procédure via PB (?)
Quel est l'intéret ? Je ne comprends pas trop
Si c'est le cas, et pour tout autres instructions DDL (create table...), il faut le faire par script avec un EXECUTE IMMEDIATE.
NB :
Sebou a écrit:
On manque cruellement de formation sur PB...si seulement on pouvait avoir des formations...:'(
On ne veut pas vous en payer ou vous n'en trouvez pas ?
Si c'est la 2ème réponse, contactez-moi.
Hors ligne
Alors, au risque de passer pour un idiot :
La procédure il faut bien qu'elle soit créée chez les clients ? C'est pour ca que je veux la créer dans l'appli.
(Attention : il se peut très bien que je raconte nawak lol)
Ensuite je ne sais pas comment l'appeler.
Concernant les formations....ca fait 3 ans que j'suis dans la boite, ca fait 3 ans qu'on nous promet une migration et des formations...Qui a dit que le père noël existait ? :-x
Dernière modification par Sebou (09-06-2010 12:53:41)
Hors ligne
Normalement, une procédure stockée doit être créée et compilée au niveau de la base de donnée,
laquelle est probablement sur un serveur.
Ensuite, depuis PB, tu as différentes manières d'appeler cette procédure:
- Directement comme datasource d'une datawindow
- Par SQL Embedded
- Par SQL dynamique.
Hors ligne
donc pour la création c'est ok...mais alors pkoi, dans le painter, quand je crée ma procédure, il me dit qu'il y a une erreur ?
ensuite pour l'appeler, sans passer par une datawindow, il faut faire quoi ?
(merci :x)
Hors ligne
Sebou a écrit:
donc pour la création c'est ok...mais alors pkoi, dans le painter, quand je crée ma procédure, il me dit qu'il y a une erreur ?
le painter DW ? Si oui, tu ne peux pas y faire des instructions DDL, uniquement des requêtes.
Sebou a écrit:
ensuite pour l'appeler, sans passer par une datawindow, il faut faire quoi ?
regarde mon post avec l'aide de PB
Hors ligne
le painter SQL, celui ou je peux taper des requetes SQL directement (l'équivalent de DBaccess)
Hors ligne
Tu n'as pas oublié le ";" final à ta requête de création?
Hors ligne
Bah non, voilà ce que je tape :
create procedure ste as select codes from societe;
Hors ligne
Tu as vérifié que ta procédure n'existe pas déjà? Auquel cas, il faut la dropper au préalable.
Je ne connais pas Informix, mais j'essayerai plutôt la syntaxe suivante:
CREATE PROCEDURE ste RETURNING CHAR(20); DEFINE returncode CHAR(20); SELECT codes INTO returncode FROM societe; RETURN returncode; END PROCEDURE;
Hors ligne
quelle est l'erreur retournée ?
Hors ligne
foon a écrit:
Tu as vérifié que ta procédure n'existe pas déjà? Auquel cas, il faut la dropper au préalable.
Je ne connais pas Informix, mais j'essayerai plutôt la syntaxe suivante:Code: sql
CREATE PROCEDURE ste RETURNING CHAR(20); DEFINE returncode CHAR(20); SELECT codes INTO returncode FROM societe; RETURN returncode; END PROCEDURE;
heu, un RETURN dans une proc, t'es sûr ?
Hors ligne
erasorz a écrit:
heu, un RETURN dans une proc, t'es sûr ?
Oui, c'est curieux, mais c'est ce que j'ai trouvé dans un forum INFORMIX.
Maintenant, n'ayant pas INFORMIX, je n'ai pas pu tester si ce code marche ou non
Hors ligne
L'erreur retournée est la suivante : SQL Error -201 : A syntax error has occured
foon, j'ai essayé ta syntaxe mais pas mieux
j'ai essayé ca aussi mais pas mieux :
CREATE PROCEDURE ste AS SELECT codes from societe; END PROCEDURE;
Line:2
SQL Error - 201 : A syntax error has occured
Si je fais 'continue', ca me met la meme chose avec la ligne 3
(sinon la procedure n'existe pas, ca c'est sur)
Hors ligne
Pour info, un lien qui peut être utile:
http://publib.boulder.ibm.com/infocente … qls250.htm
Je suppose que ta table "societe" existe bien, et que tu as les droits d'accès et de création de procédures adéquats?
Hors ligne
le même syntaxe est-elle acceptée dans ton outil dbaccess ?
en fait, sans vouloir faire le rabat-joie , je ne vois pas la valeur ajoutée de le faire dans PB... (painter ou code)
Hors ligne
non la syntaxe n'est pas acceptée dans dbaccess.
en revanche, en dbaccess, la syntaxe suivante est acceptée :
create procedure soci() select codes from societe into temp toto; end procedure
mais là il y a un autre pb : la table temporaire toto
et si on ne met pas ce "into temp toto", ca veut pas ca met comme erreur qu'on ne peut pas faire de select sans table temporaire.
Sinon @erasorz, je fait de vouloir passer par le painter, c'est juste pour ne pas avoir 36 000 fenetres ouvertes et tt faire dans PB
Hors ligne
donc ça se résume à une problématique 100% informix, et là je ne peux rien pour toi...
Hors ligne