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 :
type_name[i].colonne_name
, si j'utilise le même code
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
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; |
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
); |
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 |
Partager