Bonjour

Je suis débutante de Postgresql et je suis en train de faire la traduction de PLSQL vers PGSQL , vu que dans PLSQL, on pourrait définir un type d'une table en utilisant %rowtype et table of, ainsi qu'on pourrait récupérer les valeurs d'une colonne ligne par ligne en utilisant :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
type_name[i].colonne_name
, si j'utilise le même code
Code : Sélectionner tout - Visualiser dans une fenêtre à part
type_name[i].colonne_name
dans Postgresql, il y a toujours une erreur qui dit type n'est pas un array et machan.
J'ai passé plusieurs jours pour trouver une solution ! Si quelqu'un a une idée, merci beaucoup d'avance !


Ying

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
49
50
create or replace 
function test_ying_genproc
  (
    PN$strDate  IN VARCHAR , -- date d'appel de la procédure
    PN$strChemin  IN VARCHAR -- chemin vers le répertoire des ressources
  )
RETURNS void AS $$
 
 
 
DECLARE
 
 
Ligne varchar;
 
 
strSelProspectTab structure%Rowtype;
strSelProspectTab_NB NUMERIC;
err numeric := 0;
 
 
 
begin
 
   SELECT *  INTO strSelProspectTab FROM structure ;
   SELECT count(*) INTO strSelProspectTab_NB FROM structure ;
 
  IF /*strSelProspectTab.count*/ strSelProspectTab_NB <> 0 THEN
    /*FOR i IN strSelProspectTab.first..strSelProspectTab.last*/
	FOR i IN 1..strSelProspectTab_NB
    LOOP
      BEGIN
        Ligne:=(' --> STRUCTURE : '|| TO_CHAR (i+1, 'FM9999') || ' et la date d''entrée est '||PN$strDate||'et la numéro de table est '||Rtrim(strSelProspectTab[i].sigle)) ;
 
		PERFORM sa.traitement_logs(Ligne);
 
 
      EXCEPTION
      WHEN OTHERS THEN
		PERFORM sa.traitement_logs( sqlerrm);
 
		PERFORM sa.traitement_logs('Problème sur la STRUCTURE de code sages : à la date : '||pn$strdate);
		PERFORM sa.traitement_logs('Problème sur la STRUCTURE '||TO_CHAR( i + 1, 'FM9999'));
 
        err:=1;
      END;
    END LOOP ;
  END IF;
end; 
$$ LANGUAGE plpgsql;
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
select test_ying_genproc
  (
    '19870102', -- date d'appel de la procédure
    '/TEST/TEMPS'   -- chemin vers le répertoire des ressources
  );


Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
 
NOTICE:  04/02/2013 11:08:33 : cannot subscript type structure because it is not an array
CONTEXT:  SQL statement "SELECT sa.traitement_logs( sqlerrm)"
PL/pgSQL function "test_ying_genproc" line 36 at PERFORM