Bonjour,
J'ai commencé a développer une application en VBA sous Autocad.
Des fonctions appellent des procédures stockées Oracle (PL/SQL).
Ca fonctionne sans problème.
Mais j'aimerais adapter la solution sous PostgreSQL. J'ai commencé a essayé de me connecter à une base de données Postgres et a écrire des procédures très simples en PL/PGSQL.
Création de la connection:
Appel d'une procedure:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9 Public Sub CreerConnectionPostgres() ... ChaineConn = "user id=postgres;password=zsefjkzhlfk;Provider=PostgreSQL OLE DB Provider;Data source=127.0.0.1" cnxPost = ChaineConn cnxPost.Open End Sub
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21 Private Sub callPostgresProceduresCercle() ... Dim Cmd As New ADODB.Command CreerConnectionPostgres Cmd.ActiveConnection = cnxPost Cmd.CommandType = adCmdStoredProc Cmd.CommandText = "insertionCercle" Cmd.Parameters.Append Cmd.CreateParameter("nomtest", adVarChar, adParamInput, 20, "Cercle") MsgBox "Avant erreur" Cmd.Execute MsgBox "Après erreur" Set Cmd = Nothing cnxOra.Close End Sub
Script Procedure PL/PGSQL
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13 CREATE OR REPLACE FUNCTION "public"."insertioncercle"(nomtest varchar) RETURNS void AS $BODY$DECLARE mavar integer DEFAULT 45; BEGIN EXECUTE 'INSERT INTO gTest(id,nom) VALUES (' || mavar || ',''' || nomTest|| ''')'; END;$BODY$ LANGUAGE 'plpgsql' VOLATILE; ALTER FUNCTION "public"."insertioncercle"(nomtest varchar) OWNER TO "postgres"; COMMENT ON FUNCTION "public"."insertioncercle"(nomtest varchar) IS '';
J'obtiens l'erreur "Procedure name for automatic arguments is not unique"
Je comprends pas trop le problème. J'ai aucune autres fonctions qui s'applle comme ca avec des paramètres différents.
Il y a t'il un moyen simple de tester la fonction directement sous PostgreSQL (pgadmin III ou Navicat). J'ai essayé avec des
-EXECUTE PROCEDURE insertioncercle('hello')
-EXECUTE PROCEDURE insertioncercle("hello")
-EXECUTE PROCEDURE insertioncercle 'hello'
...
Mais j'ai a chaque fois l'erreur "Syntax error at or near "insertioncercle" au caractère 19"
Partager