Bonjour,

J'ai deux tables :

MLE_EXEMPLE2
CREATE TABLE MLE_EXEMPLE2
( MLE2_V2_COL1 VARCHAR2(050) NOT NULL,
MLE2_V2_COL2 VARCHAR2(050) NOT NULL,
MLE2_DT_COL1 DATE NOT NULL,
MLE2_NB_COL1 NUMBER(3) NOT NULL,
MLE2_V2_COL3 VARCHAR2(050),
CONSTRAINT PK_MLE2
PRIMARY KEY
(MLE2_V2_COL1)
USING INDEX
TABLESPACE I_NORA
)
TABLESPACE D_NORA
LOGGING
NOCOMPRESS
NOCACHE
NOPARALLEL
NOMONITORING;
MLE_EXEMPLE1
CREATE TABLE MLE_EXEMPLE1
( MLE1_V2_COL1 VARCHAR2(050) NOT NULL,
MLE1_V2_COL2 VARCHAR2(050) NOT NULL,
MLE1_V2_COL3 VARCHAR2(200) NOT NULL,
MLE1_DT_COL1 DATE NOT NULL,
MLE1_NB_COL1 NUMBER(3) NOT NULL,
CONSTRAINT PK_MLE1
PRIMARY KEY
(MLE1_V2_COL1, MLE1_V2_COL2)
USING INDEX
TABLESPACE I_NORA
)
TABLESPACE D_NORA
LOGGING
NOCOMPRESS
NOCACHE
NOPARALLEL
NOMONITORING;

ALTER TABLE MLE_EXEMPLE1 ADD (
CONSTRAINT FK_MLE1_MLE2 FOREIGN KEY (MLE1_V2_COL1)
REFERENCES MLE_EXEMPLE2(MLE2_V2_COL1));
J'ai créer une vue V_MLE_EXEMPLE à partir de ces deux tables. Une des colonnes de cette vue fait appel à une fonction

CREATE OR REPLACE FORCE VIEW V_MLE_EXEMPLE(
VMLE_MLE1_V2_COL1
, VMLE_MLE1_V2_COL2
, VMLE_MLE1_V2_COL3
, VMLE_MLE1_DT_COL1
, VMLE_MLE1_NB_COL1
, VMLE_MLE2_V2_COL2
, VMLE_MLE2_DT_COL1
, VMLE_MLE2_NB_COL1
, VMLE_MLE_V2_TEST)
AS
SELECT mle1_v2_col1
, mle1_v2_col2
, mle1_v2_col3 --mle1_v2_col3 -- SUBSTR(mle1_v2_col3, 1,50) --
, mle1_dt_col1
, mle1_nb_col1
, mle2_v2_col2
, mle2_dt_col1
, mle2_nb_col1
, SUBSTR(pack_reprise_table_arno.recherche_telephone_prefixe(mle2_nb_col1, 'FIX', 'CLIE' , 'NTEL'),1,32)
FROM mle_exemple1_nora
, mle_exemple2_nora
WHERE mle1_v2_col1 = mle2_v2_col1;
J'ai créer un TRIGGER INSTEAD OFF rattaché à la vue V_MLE_EXEMPLE

CREATE OR REPLACE TRIGGER ARNO.TRG_V_MLE_EXEMPLE_INSTEAD
INSTEAD OF INSERT OR UPDATE OR DELETE
ON ARNO.V_MLE_EXEMPLE
REFERENCING NEW AS New OLD AS Old
FOR EACH ROW
DECLARE
v2_test VARCHAR2(5);
BEGIN

IF INSERTING THEN

INSERT INTO mle_exemple2_nora(
mle2_v2_col1
, mle2_v2_col2
, mle2_dt_col1
, mle2_nb_col1
, mle2_v2_col3)
VALUES (
:new.vmle_mle1_v2_col1
, :new.vmle_mle2_v2_col2
, :new.vmle_mle2_dt_col1
, :new.vmle_mle2_nb_col1
, SUBSTR(:new.vmle_mle_v2_test,1,32));

INSERT INTO mle_exemple1_nora(
mle1_v2_col1
, mle1_v2_col2
, mle1_v2_col3
, mle1_dt_col1
, mle1_nb_col1)
VALUES (
:new.vmle_mle1_v2_col1
, :new.vmle_mle1_v2_col2
, :new.vmle_mle1_v2_col3
, :new.vmle_mle1_dt_col1
, :new.vmle_mle1_nb_col1);

END IF;

IF UPDATING THEN
UPDATE mle_exemple1_nora
SET mle1_v2_col2 = :new.vmle_mle1_v2_col2
, mle1_v2_col3 = :new.vmle_mle1_v2_col3
, mle1_dt_col1 = :new.vmle_mle1_dt_col1
, mle1_nb_col1 = :new.vmle_mle1_nb_col1
WHERE mle1_v2_col1 = :old.vmle_mle1_v2_col1
AND mle1_v2_col2 = :old.vmle_mle1_v2_col2;

UPDATE mle_exemple2_nora
SET mle2_v2_col2 = :new.vmle_mle2_v2_col2
, mle2_dt_col1 = :new.vmle_mle2_dt_col1
, mle2_nb_col1 = :new.vmle_mle2_nb_col1
, mle2_v2_col3 = SUBSTR(:new.vmle_mle_v2_test,1,32)
WHERE mle2_v2_col1 = :old.vmle_mle1_v2_col1;

END IF;

IF DELETING THEN
DELETE FROM mle_exemple1_nora
WHERE mle1_v2_col1 = :old.vmle_mle1_v2_col1;

DELETE FROM mle_exemple2_nora
WHERE mle2_v2_col1 = :old.vmle_mle1_v2_col1;
END IF;

EXCEPTION
WHEN OTHERS THEN
Raise;
END TRG_V_MLE_EXEMPLE_INSTEAD;
Quand je fait en SQL un INSERT, UPDATE, DELETE dans la vue V_MLE_EXEMPLE ça marche très bien.
[/COLOR][/b]

Quand je créé un écran FORM basé sur ma vue V_MLE_EXEMPLE, je peux faire des INSERT, UPDATE, DELETE sans aucun problème.

Par contre quand je créé un écran qui utilise un ancien outil oracle qui s'appelle ACCELL/ORACLE Development Environment basé sur ma vue V_MLE_EXEMPLE :

- j'ai aucun problème pour l'UPDATE et le DELETE
- par contre pour l'INSERT j'ai le message d'erreur suivant en insertion :

A database error has occured.
ORA-22816 : unsupported feature with RETURNING Clause ORA-06512 : at line 3


Merci pour vos réponses.