Bonjour à tous,
Je débute sous pl/sql (merci aux didacticiel developpez.com) mais j'ai un petit problème de performance.
Je veux créer une table temporaire sur la base d'une table existante mais en transformant certains champs. Ces transformations sont lourdes et compliquées et je n'arrivais pas à m'en sortir avec du simple SQL.
J'ai donc créé un bloc PL/SQL pour mettre à jour mes lignes, voici le code que j'ai utilisé :
Mais c'est très long à l'exécution, mais je suis sûr que l'on peut l'optimiser. J'ai essayé de faire le traitement lors de l'insert (fait en SQL) mais il me dit qu'il n'est pas possible d'appeller un fonction PL/SQL dans une instruction SQL. J'ai essayé de manipuler uniquement le CURSOR et ses champs, mais je n'y arrive pas.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26 DECLARE CURSOR table_cp IS SELECT * FROM tmp; employe tmp%ROWTYPE; nv_num_eng varchar2(7); Function nouv_num_eng (old_num_eng IN varchar2) return varchar2 is nouv_num varchar2(7); Begin -- TRAITEMENT return nouv_num ; end; BEGIN FOR employe IN table_cp LOOP nv_num_eng := nouv_num_eng (employe.eceb_num); UPDATE tmp SET ceng_cod=nv_num_eng WHERE eceb_num=employe.eceb_num; END LOOP; commit; END;
Quelqu'un pourrait me donner un coup de pouce ?
Merci d'avance
Partager