Salut,
Tout d'abord, inutile de mettre la ligne <<and b.code_cp not like 'CP4%'>> car c'est déjà inclu dans <<where a.code_cp = b.code_cp>> où a pointe vers <<a.code_cp not like 'CP4%';>>
update ficcli.client a
set a.seg_phs = (
select b.seg_phs
from ficcliint.maj_seg_phs b
where a.code_cp = b.code_cp
and b.code_cp not like 'CP4%'
and a.code_clisir = b.code_clisir)
where a.code_cp not like 'CP4%';
devient
update ficcli.client a
set a.seg_phs = (
select b.seg_phs
from ficcliint.maj_seg_phs b
where a.code_cp = b.code_cp
and a.code_clisir = b.code_clisir)
where a.code_cp not like 'CP4%';
Ensuite il faudrait un explain plan de ta requête pour voir où est le soucis.
Créer la table plan_table
CREATE TABLE PLAN_TABLE (
STATEMENT_ID VARCHAR2(30),
TIMESTAMP DATE,
REMARKS VARCHAR2(80),
OPERATION VARCHAR2(30),
OPTIONS VARCHAR2(30),
OBJECT_NODE VARCHAR2(128),
OBJECT_OWNER VARCHAR2(30),
OBJECT_NAME VARCHAR2(30),
OBJECT_INSTANCE NUMERIC,
OBJECT_TYPE VARCHAR2(30),
OPTIMIZER VARCHAR2(255),
SEARCH_COLUMNS NUMBER,
ID NUMERIC,
PARENT_ID NUMERIC,
POSITION NUMERIC,
COST NUMERIC,
CARDINALITY NUMERIC,
BYTES NUMERIC,
OTHER_TAG VARCHAR2(255),
PARTITION_START VARCHAR2(255),
PARTITION_STOP VARCHAR2(255),
PARTITION_ID NUMERIC,
OTHER LONG,
DISTRIBUTION VARCHAR2(30));
Faire l'analyse de la requête par
EXPLAIN PLAN set statement_id = 'requete' for
update ficcli.client a
set a.seg_phs = (
select b.seg_phs
from ficcliint.maj_seg_phs b
where a.code_cp = b.code_cp
and a.code_clisir = b.code_clisir)
where a.code_cp not like 'CP4%';
Ensuite lance la requête
SELECT LPAD(' ',2*(LEVEL-1))||operation operation, options,
object_name, position
FROM output
START WITH id = 0 AND statement_id = '
requete'
CONNECT BY PRIOR id = parent_id AND
statement_id = '
requete';
Affiche nous le resultat, en fonction de la sortie, il faudra peut-etre mettre des hints oracle ou des index
Bon courage