Précédent   Forum des professionnels en informatique > Bases de données > PostgreSQL
PostgreSQL Forum PostgreSQL. Avant de poster -> F.A.Q PostGreSQL Tutoriels PostGreSQL
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 11/09/2006, 11h43   #1
Membre régulier
 
Inscription : avril 2004
Messages : 284
Détails du profil
Informations forums :
Inscription : avril 2004
Messages : 284
Points : 75
Points : 75
Par défaut utiliser une fonction VOID pour des blocs relationnels ?

Bonjour,

Je voudrais automatiser des insertions sur mes tables grâce à Perl en récupérant les résultats de lignes d'un fichier texte.

Je voudrais savoir s'il est possible d'utiliser une fonction en utilisant un bloc transactionnel de la manière :

CREATE FUNCTION ch() RETURNS VOID AS '
BEGIN
INSERT INTO essai VALUES (456, ''essai de texte'');
END;
' LANGUAGE 'PLPGSQL';

Je voudrais déclencher une fonction de ce type pour chaque ligne du fichier.

Merci.

C. Tobini
ctobini est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/09/2006, 13h00   #2
Membre émérite
 
Avatar de hpalpha
 
Inscription : mars 2002
Messages : 770
Détails du profil
Informations forums :
Inscription : mars 2002
Messages : 770
Points : 833
Points : 833
Bonjour,

je suis pas sur d'avoir bien compris, mais pour appeler ta procedure, tu fais directement : SELECT ch();

Ca donnerai un truc du genre :


Code :
1
2
3
4
5
6
7
8
9
10
11
12
USE DBI;
  my $madb = DBI->connect('dbi:PgPP:dbname=$dbname', '', ''');
 
 
 open(FICHIER,"mesdonnees.txt");
 while(<FICHIER>) {
  $q = $madb->prepare("SELECT ch(".$_.")");
  $q->execute;
  $q -> finish;
 }
 close(FICHIER);
 $madb->disconnect();
hpalpha est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/09/2006, 15h41   #3
Membre régulier
 
Inscription : avril 2004
Messages : 284
Détails du profil
Informations forums :
Inscription : avril 2004
Messages : 284
Points : 75
Points : 75
Bonjour et merci de ta réponse,

En fait je souhaite effecture certaines opérations depuis une fonction, mais un SELECT fonction() demande un type de retour (j'ai une erreur).

Je voudrais que la fonction effectue les opérations en question (INSERT et UPDATE).

J'ai tenté un EXECUTE fonction() mais ça ne plaît pas du tout à Postgresql

C. Tobini
ctobini est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/09/2006, 16h16   #4
Membre émérite
 
Avatar de hpalpha
 
Inscription : mars 2002
Messages : 770
Détails du profil
Informations forums :
Inscription : mars 2002
Messages : 770
Points : 833
Points : 833
quelle version utilise tu ?

sur la 8.x j'ai pas de soucis, je fais un select ch(); directement ca marche, sinon tu peux toujours renvoyer un boolean

Code :
1
2
3
4
5
6
CREATE FUNCTION ch() RETURNS BOOLEAN AS '
BEGIN
INSERT INTO essai VALUES (456, ''essai de texte'');
RETURN TRUE;
END;
' LANGUAGE 'PLPGSQL';
hpalpha est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 16h48.


 
 
 
 
Partenaires

Hébergement Web