Créer un exception lors d'une erreur 22P02
Bonjour à tous,
J'ai un petit problème que je n'arrive pas à résoudre seule, j'espère que certains d'entre vous auront des idées sur ce sujet :
Le principe :
J'ai une base de données géométrique dans la quelle j'importe des coordonnées (x,y,z) et quelques autres données type nom, lieu, dates... Ces données sont importées via une interface sous python. Je lis un fichier Excel et importe ces données dans ma base.
Parfois, j'ai des cases vides dans mon tableau ou des données différentes de ce que j'ai en temps normal. Par exemple, au lieu d'une hauteur double précision "40.2" je vais avoir un texte "non calculé". Dans ces cas-là, j'ai naturellement une erreur de type puisque j'importe un texte dans un double precision.
Exemples de messages d'erreurs :
Code:
1 2 3 4 5 6 7 8 9 10 11 12
|
1---
ProgrammingError: FEHLER: Spalte „pt_y“ hat Typ integer, aber der Ausdruck hat Typ text
LINE 4: SELECT data65, data3,data4,data5,data67
^
HINT: Sie müssen den Ausdruck umschreiben oder eine Typumwandlung vornehmen.
QUERY: INSERT INTO point( pt_projnum , pt_x , pt_y , pt_z, pt_projname[
En francais : type du champ int et type de la donnée text. Types incompatibles
2----
FEHLER: ungültige Eingabesyntax für ganze Zahl: „la“
SQL Status:22P02
En francais : Erreur de syntaxe, "la" invalide pour un nombre |
Ce que j'aimerais :
J'aimerais pouvoir continuer l'importation des données, même si j'ai cette erreur et remplacer la valeur invalide par une case vide ou un code d'erreur.
Je ne suis pas habituée aux bases de donnée, j'aimerais faire quelque chose comme en programmation du type :
Code:
1 2 3 4 5
|
try :
blablabla
except Error... :
pass |
J'ai vu que des choses existaient, mais je n'ai aucune idée de comment cela fonctionne. Exemple :
Code:
1 2 3 4 5 6 7 8 9 10 11 12
| CREATE OR REPLACE FUNCTION insert_false() RETURNS VOID AS $$
BEGIN
insert into point(pt_projnum, pt_y) values ('ex1','la'),('ex2', '2'),('ex3', '12');
EXCEPTION
WHEN invalid_text_representation THEN
-- Do nothing.
END;
$$
LANGUAGE plpgsql;
select insert_false();
select * from point ; |
Merci d'avance pour vos conseils !:mrgreen: