INSERT SELECT en dynamique et COMMIT
Bonjour
j'ai fait un INSERT qui se base sur un SELECT dynamique :
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 27
| DECLARE
LConn_conn_id EXEC_SQL.CONNTYPE;
LCu_spec EXEC_SQL.CURSTYPE;
LC_sql_stmt VARCHAR2(500);
LI_nIgn PLS_INTEGER;
LC_code_article VARCHAR2(40);
LC_description VARCHAR2(240);
LC_spec VARCHAR2(30);
i NUMBER;
BEGIN
LConn_conn_id := EXEC_SQL.DEFAULT_CONNECTION;
LCu_spec := EXEC_SQL.OPEN_CURSOR(LConn_conn_id);
--LC_sql_stmt := 'INSERT INTO SWM_SPE_DT_1_4 (CODE_ARTICLE, DESCRIPTION, SPECIFICATION) ' || vv_requete_debut || vv_requete_fin;
LC_sql_stmt := 'INSERT INTO SWM_SPE_DT_1_4 (CODE_ARTICLE, DESCRIPTION, SPECIFICATION) ' || 'SELECT ''g'', ''h'', ''i'' FROM DUAL';
EXEC_SQL.PARSE(LConn_conn_id, LCu_spec, LC_sql_stmt);
LI_nIgn := EXEC_SQL.EXECUTE(LConn_conn_id, LCu_spec);
EXEC_SQL.CLOSE_CURSOR(LConn_conn_id, LCu_spec);
EXEC_SQL.CLOSE_CONNECTION(LConn_conn_id);
:swm_spe_dt_1_21.description := :swm_spe_dt_1_21.description;
--commit;
commit_form;
EXCEPTION WHEN EXEC_SQL.PACKAGE_ERROR THEN
EXEC_SQL.CLOSE_CURSOR(LConn_conn_id, LCu_spec);
EXEC_SQL.CLOSE_CONNECTION(LConn_conn_id);
END; |
le problème est lors du commit ou commit_form, j'ai un message qui me dit qu'aucune modification a eu lieu, du coup j'ai modifié un champ de mon block en lui remettant sa valeur mais j'ai quand même le message.
Comment faire un commit de mon instruction sans forcément committer l'écran ?
Merci
You 're right, old fellows
:oops:
J'ai retesté votre solution, ca marche.
Cependant, j'ai des routines que j'utilise depuis des années (10 ? 12) et qui emploient cette technique (surcharge de on_error), documentée par ORACLE.
AVANTAGE :
-on peut voir les autres messages de meme niveau
- On peut traduire les messages (applications multi-langues)
INCONVENIENT : utilisation d'un trigger 'ON_XXXXXX'