Quelqu'un fait un peu de Pl/pg sql [EDIT] - SQL/NoSQL - Programmation
MarshPosté le 24-02-2006 à 14:12:19
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);
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
Marsh Posté le 24-02-2006 à 14:12:19
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 :
puis j'ai commener a tape 2-3 fonction, l'une d'elle pour découper dans articles 2 les champs auteur:
qui marche nickel avec un :
select split_auteur('Daxin Jiang Jian Pein Aidong Zhang');
select * from auteur;
ou
select split_auteur('Daxin Jiang Jian Pein Aidong');
select * from auteur;
Mais alors now, je veux pour chaque liste d'auteur:
Voilà ben ça me fais des bug assez aléatoire:
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