[Oracle 8i] [PL/SQL] Pb performance
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é :
Code:
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; |
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.
Quelqu'un pourrait me donner un coup de pouce ?
Merci d'avance
Re: [Oracle 8i] [PL/SQL] Pb performance
Je ne comprends pas trop ton problème, peux-tu préciser STP ?
Citation:
Envoyé par cyrilc
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.
Ce n'est pas vrai :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
| SQL> create table test (n number);
Table created.
SQL> create function ret_1 return number is
2 begin
3 return (1);
4 end;
5 /
Function created.
SQL> insert into test values (ret_1);
1 row created.
SQL> select * from test;
N
---------
1 |