Bonjour à tous,

J'utilise un driver jdbc pour postgresql (postgresql-8.3-604.jdbc4.jar) avec mon appli java. Mon but est de charger (executer) des fichiers .sql au démarrage de l'application pour pouvoir appeler des fonctions sur la base de données juste en appelant SELECT my_function() quand l'utilisateur le désire. Pour la petite précision, ces fichiers ne contiennent que des CREATE FUNCTION.

Pour l'instant, je ne travaille que sur un seul fichier. Mon fichier se charge correctement mais j'ai un problème. Une fois que j'ai appelé une première fois la fonction main de ce fichier, la deuxième fois plante mais sans réelle raison.

J'ai donc essayé de rappeler la fonction (sans recharger le fichier) en utilisant pgAdmin III et là impossible de reproduire l'erreur : je peux appeler autant de fois que je veux la fonction juste en faisant 'SELECT my_function'.

Voici le bout de code (quelques commentaires en moins) qui plante lors de la deuxième exécution et son log d'errors associé :

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
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
 
CREATE OR REPLACE FUNCTION tools.ver_proj_init_declaration() RETURNS void as $$
DECLARE
BEGIN
 
	DROP SCHEMA IF EXISTS verproj CASCADE;
	CREATE SCHEMA verproj;
 
	SET search_path TO verproj,tools,pg_catalog, public;
 
	-- init VER_PROJ_REPORT 
	CREATE TABLE  verproj.VER_PROJ_REPORT (line_nb INTEGER,report_line VARCHAR);
 
	CREATE TABLE VER_TIME_REPORT (line_nb INTEGER, prof_nb INTEGER, coltext VARCHAR, coltime VARCHAR);
 
	CREATE TABLE verproj.MyGlobalVar_TBL(line_nb        INTEGER, prof_nb        INTEGER);
 
	CREATE TABLE verproj.MyGVar_TBL(card           INTEGER,
	                        card_head      INTEGER,
	                        diag_index     INTEGER,
	                        direct_dic_max INTEGER,
	                        eq_index       INTEGER,
	                        line_nb        INTEGER,
	                       nb_of_pages    INTEGER,
		                        out_text       VARCHAR,
		                        simdru_dic_max INTEGER,
		                        simple_dic_max INTEGER);
 
 
 
	INSERT INTO verproj.MyGlobalVar_TBL VALUES ( 0  /* line_nb */,
					    1  /* profondeur */);
 
	-- init My_GVar_TBL : Table of global variables necessary
	INSERT INTO verproj.MyGVar_TBL VALUES 														( 0   /* card */,
		                                0   /* card_head */,
		                                1   /* diag_index */,
		                                0   /* direct_dic_max */,
		                                0   /* eq_index */,
		                                0   /* line_nb */,
		                                0   /* nb_of_pages */,
		                               ''   /* out_text */, 
		                                0   /* simdru_dic_max */,
		                                0   /* simple_dic_max */);
[...]
	return;
	END; 
$$ LANGUAGE plpgsql;
En regardant dans le fichier de log de postgreSQL, il me dit qu'il plante sur le dernier INSERT de la function :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
 
2009-02-23 11:02:46 GMT ERREUR:  la relation « mygvar_tbl » n existe pas
2009-02-23 11:02:46 GMT CONTEXTE :  instruction SQL « INSERT INTO MyGVar_TBL VALUES ( 0 , 0 , 1 , 0 , 0 , 0 , 0 , '' , 0 , 0 ) »
	PL/pgSQL function "ver_proj_init_declaration" line 40 at SQL statement
	instruction SQL « SELECT  ver_proj_init_declaration() »
Voilà j'espère avoir été claire.
Je suis incapable de comprendre d'où ça vient. Sachant que si je charge le fichier directement dans postgresql sans passer par l'appli, le même comportement se produit...

Si l'un d'entre vous aurait une piste ou une vague idée, je suis toute ouïe.

Merci beaucoup & bonne journée