xtof_83 Freeride Spirit | Bonjour ,
EDIT: Bon le probléme je l'ai réglé en faisant tout dans la meme fonction.
Mais là une question, il me faut un moment dans le programme, mettre un valeur dans un champs de type tableau qui ne peux être inialise..
je fais un select de cette valeur ce qui me dis dans un notice:
variable "%" -----> variable "<NULL>"
mais jarrive pas derriére, à touver la condition qu'il faut pour dire :
si valeur = <NULL> alors mettre à 0
Merci d'avance... cette année petit projet en base de donné et on a l'honneur devoir apprendre le plpgsql, ça a l'air d'un bon petit langage de programmation bien puissant
Mais j'ai des bug inexplicable: je m'explique:
j'ai 3 tables, l'une contenant des données considérable que nous devons analyser et mettre dans les autres table...Sur la logique pas de probléme...
donc :
Code :
- -- table a traiter
- CREATE TABLE articles2 (
- id serial,
- auteur varchar(3000),
- titre varchar(3000),
- abstract varchar(5000),
- primary key (id)
- );
- CREATE TABLE article (
- id serial,
- titre varchar(3000),
- abstract varchar(5000),
- PRIMARY KEY (id)
- );
- --Table pour les auteurs avec correspondance aux articles
- CREATE TABLE auteur (
- id serial,
- id_article integer,
- nom varchar(255),
- prenom varchar(255),
- PRIMARY KEY(id),
- FOREIGN KEY (id_article) REFERENCES article(id)
- );
|
puis j'ai commener a tape 2-3 fonction, l'une d'elle pour découper dans articles 2 les champs auteur:
Code :
- CREATE FUNCTION split_auteur(text) RETURNS INTEGER AS '
- DECLARE
- chaine TEXT;
- count INTEGER;
- BEGIN
- RAISE NOTICE ''error % '',$1;
- chaine:= $1;
- LOOP
- IF(length(split_part(chaine,'' '',2))=0) THEN
- EXIT;
- ELSE
- INSERT INTO auteur (nom,prenom) VALUES (split_part(chaine,'' '',1),split_part(chaine,'' '',2));
- END IF;
- IF(length(chaine)=length(split_part(chaine,'' '',1))+1+length(split_part(chaine,'' '',2))) THEN
- EXIT;
- ELSE
- chaine:=overlay(chaine placing '''' from 1 for (length(split_part(chaine,'' '',1))+1+length(split_part(chaine,'' '',2)))+1);
- END IF;
- END LOOP;
- RETURN 0;
- END;'
- LANGUAGE 'plpgsql';
|
qui marche nickel avec un :
Citation :
select split_auteur('Daxin Jiang Jian Pein Aidong Zhang');
select * from auteur;
|
ou
Citation :
select split_auteur('Daxin Jiang Jian Pein Aidong');
select * from auteur;
|
Mais alors now, je veux pour chaque liste d'auteur:
Code :
- CREATE FUNCTION parcours_all() RETURNS VOID AS '
- DECLARE
- ida RECORD;
- a INTEGER;
- BEGIN
- FOR ida IN SELECT * FROM articles2 LOOP
- SELECT split_auteur(ida.auteur) INTO a;
- END LOOP;
- END;'
- LANGUAGE 'plpgsql';
|
Voilà ben ça me fais des bug assez aléatoire:
Citation :
ERROR: cache lookup failed for function 32911
CONTEXT: SQL statement "SELECT insert_title_abstract( $1 , $2 )"
PL/pgSQL function "parcours_all" line 6 at select into variables
|
Merci d'avance Message édité par xtof_83 le 25-02-2006 à 02:18:43
|