PostgreSQL La base de donnees la plus sophistiquee au monde.

Forums PostgreSQL.fr

Le forum officiel de la communauté francophone de PostgreSQL

Vous n'êtes pas identifié(e).

#1 Re : PL/pgSQL » erreur pendant execution Function "return" nombre records » 04/06/2018 13:56:05

C'était....
En faite le problème c'est que j'essayé de exécuter le code suivant :
vTable varchar(30);
vCount int;
"select count * from vTable into vCount"
Or aprés quelques recherches,  Le variable "vTable" étant une table ce type de syntax doit être execute en mode dynamique

#2 PL/pgSQL » erreur pendant execution Function "return" nombre records » 01/06/2018 13:57:34

carls
Réponses : 2

Bonjour a tous,

J'ai cette function

--- Function
CREATE OR REPLACE FUNCTION f_count_rec (vTableName text)
RETURNS int4
LANGUAGE plpgsql
AS $$
declare
    vCount             int4;
        stmt                          text;
begin
        stmt := 'select count (*) from '||vTableName;
        execute stmt into vCount;
                 return vCount;
end;
$$

Marche correctement


---  Table pour test
create table testr (testr int)
insert into testr values (10);
insert into testr values (20);
insert into testr values (30);

--- Count
select count(*)
from
testr

-- Execution de la funtion
select f_count_rec('testr');

#4 PL/pgSQL » Afficher heure début et heure de fin de execution dans une procedure » 31/05/2018 09:45:00

carls
Réponses : 2

Bonjour à tous.
Pendant de l’exécution d'une procédure  J'ai besoin de afficher (insérer dans une table de log) le'heure de début et puis à la fin, l'heure laquelle s'est terminé.
J'ai utilisé "select now() into var" au début de la proc
et puis "select now() into var2" à la fin
Cependant, le résultat est toujours le même !!!  L'heure début = l'heure de fin ?!?
Avez vous une idée
Merci d'avance
Cdt

#5 Re : PL/pgSQL » Convertir et substring text to integer » 25/05/2018 18:15:53

Oui, dans certains cas, oui.
Donc, l'idée est de convertir en INT les valeurs en chiffres

#6 Re : PL/pgSQL » Convertir et substring text to integer » 25/05/2018 14:59:40

Bonjour
Mais il y pas de carcter en chiffre,, justement
SUBSTR(col1,4,3) ramene uniquement les chiffres

#7 Re : PL/pgSQL » Convertir et substring text to integer » 24/05/2018 14:54:27

Voici un testcase "propre"

create table test2 (text text);
--
insert into test2 values ('000        ');     
insert into test2 values ('050001     ');
insert into test2 values ('022000    A');
--
select text from test2 
--
Objectif:
A partir d'ici j'essaye de convertir le subchaîne de caractéres --> substr(text,4,3) en integer sans sucées.
J'au aussi essayé avec nullif, ::integer, tout ce qu'il y a dans le marché à l'heure actuel,
En résumé, j'ai aussi les suggestion du lien
https://stackoverflow.com/questions/105 … r-postgres
--
Test effectués:
L'idée de utiliser case c'étais plutôt avec cet objectif

       case
             when (substring(text,4,3)) = ' ' then null
             else cast(substring(text,4,3)) as integer
        end  as case1
--
Mais postgress ne veut pas "caster" tout simplement ....
Vous trouverez ci-dessous aussi la requete avec plusieurs functions utilisées
--
select
        cast(replace(substr(text,4,3),'',null) as integer) colA,
         replace(trim(substr(text,4,3)),'',null) colB,
         coalesce(substr(text,4,3),'0'),
         --cast(nullif(substring(text,4,3),'')as integer) NULLIFF,
         case
             when (substring(text,4,3)) = null then null
             else (substring(text,4,3))
        end  as case1
from test2
--
Si vous avez des idées, merci d'avance

#8 Re : PL/pgSQL » Convertir et substring text to integer » 24/05/2018 09:57:52

Salut Julien

Je suis d'accord avec toi, au sujet de l'inversion de substr() avec le CAST. Mais c'étais la syntaxe que j'ai trouvé dans le web pour la plupart de examples.

J'ai essayé ton code et ça marche bien, pour cet exampleµ.
Cependant, j'ai une ligne vide, example, si on insert un nouveau registre
insert into test values ('   ')

La ca ne marche plus.
Une idée c'est la bienvenue.


J'ai aussi essayé avec case

CASE
   WHEN substr(text,2,3) is null the null
   ELSE cast( substr(text,2,3) as integer)
END as COL2

Ce qui me semble trés logique, parce que si j'enleve le CAST dérriere le substr ça marche trés bien.

J'ai aussi essayé avec replace et trim, genre
replace(substr(tex,2,3),'',null) ... comble de l'ironie ... remplace toutes les valeurs du champs par null
avec trim
trim(substr(tex,2,3),'',null') ... même résultat .... remplace toutes les valeurs par nulll

Je suis à court d'idées ....
Cdt


Rien y fait.

#9 PL/pgSQL » Convertir et substring text to integer » 23/05/2018 18:47:48

carls
Réponses : 9

Bonjour a tous,

J'ai un "petit" gros probleme de conversion avec pgSQL


J'ai une table test:
create table test(texto text)

On insérer 3 lignes

insert into test values ('123')
insert into test values ('    565') (ici 4 espaces en blanc suivi de 565)
insert into test values ('456')

Et voici un example du conten de ma table


J'ai besoin de soustraire 2 charactéres dans une chaîne text et convertir en int à partir de la 2éme position

J'ai essayé
select substr(CAST(texto AS INTEGER),2,2) from test >> et j'ai toujours un message :"ERROR 42883: function integer,integer,integer doesn't exist"

J'ai essayé une autre approche en utilisant
select nullif(substr(texto,2,3),'')::integer from test >> et je reçois le message ERROR 22P02 invalid synatx near ""

En faite c'est la ligne avec les espaces en blanc  que générè ce comportement, parce que ma chaine de conversion commence à 2 avec 2 de longeur, or dasn cette intervale on retrouve une valeur nul

Pouvez vous m'aider ?

Merci d'avance

Pied de page des forums

Propulsé par FluxBB