Bonjour à tous.
J'ai un problème d'appel de fonction sur un utilisateur variable.
le problème est issu d'un projet conséquent mais se résume à ceci
plusieurs utilisateurs ont défini la fonction suivante:
moi, je doit créer une procedure equivalente à unUser.reg(USER);Code:
1
2
3
4
5 create or replace function reg(id varchar2) return integer IS begin insert into testrc (id) values ('''||id||'''); return 1; end;
j'ai essayé ceci, mais ca ne fonctionne pas, je reçois un "ORA-00900: invalid SQL statement"
par ailleur, le code suivant plante aussi, mais a cause de "can't do DML order in select"Code:
1
2
3
4
5
6
7
8
9
10
11
12 CREATE OR REPLACE PROCEDURE enregistrer(unUser varchar2) IS moi varchar2(50); n integer; ordre varchar2(100); BEGIN select USER into moi from dual; execute immediate unUser||'.reg('''||moi||''')' into n; --ou execute immediate 'n:= '||unUser||'.reg('''||moi||''')'; dbms_output.put_line(n); END;
si je fait simplement n:=user1.reg('usermoi'); ca fonctionne, mais ca n'est pas la procédure souhaitéeCode:execute immediate 'select '||unUser||'.reg('''||moi||''') from dual' into n;
Je parie que la solution est simple, mais je ne la trouve pas.
EDIT:
Comme prédit la solution est "simple": il suffit de faire une transaction autonome
cependant, s'il existe une solution ne demandant pas de modifier reg, ca serait mieux. (en principe, ce n'est pas à moi d'écrire reg)Code:
1
2
3
4
5
6
7 create or replace function reg(id varchar2) return integer IS pragma autonomous_transaction; begin insert into testrc (id) values ('''||id||'''); commit; return 1; end;