C# 我无法通过Oracle实现同样的效果,并引发应用程序错误。这是我称之为“日志表”的方法,如果我不解决OracleConnection.InfoMessage事件的使用问题,将使用这种方法。这个问题正是关于Oracle DB和InfoMessage事件的。我
我无法通过Oracle实现同样的效果,并引发应用程序错误。这是我称之为“日志表”的方法,如果我不解决OracleConnection.InfoMessage事件的使用问题,将使用这种方法。这个问题正是关于Oracle DB和InfoMessage事件的。我已经使用SqlConnection和InfoMessage事件从长时间运行的过程中捕获了RAISEERROR,并且它按照预期工作。但是,我无法用Oracle实现同样的效果,并提出应用程序错误。C# 我无法通过Oracle实现同样的效果,并引发应用程序错误。这是我称之为“日志表”的方法,如果我不解决OracleConnection.InfoMessage事件的使用问题,将使用这种方法。这个问题正是关于Oracle DB和InfoMessage事件的。我,c#,oracle,odp.net,C#,Oracle,Odp.net,我无法通过Oracle实现同样的效果,并引发应用程序错误。这是我称之为“日志表”的方法,如果我不解决OracleConnection.InfoMessage事件的使用问题,将使用这种方法。这个问题正是关于Oracle DB和InfoMessage事件的。我已经使用SqlConnection和InfoMessage事件从长时间运行的过程中捕获了RAISEERROR,并且它按照预期工作。但是,我无法用Oracle实现同样的效果,并提出应用程序错误。 private void OnInfoMessag
private void OnInfoMessage(object sender, OracleInfoMessageEventArgs e)
{
foreach (OracleError err in e.Errors)
{
ShowSomeText(err.Message);
}
}
drop sequence sq;
create sequence s1;
drop table status;
create table status(id number, descriptions varchar2(100));
CREATE OR REPLACE PROCEDURE update_status (id_in IN Number,description_in IN varchar2,dml_type_in IN varchar2) AS
PRAGMA AUTONOMOUS_TRANSACTION;
id_1 number:= id_in;
description_1 varchar2(100):=description_in;
dml_type_1 char(1):=dml_type_in;
BEGIN
if dml_type_1='I' then
insert into status values(id_1, description_1);
elsif dml_type_1 = 'U' then
update status set descriptions=description_1 where id=id_1;
else
delete from status where id=id_1;
end if;
commit;
END;
CREATE OR REPLACE PROCEDURE SP1 (id_in IN number)
AS
BEGIN
--step 1
update_status(id_in,'Entering Step 1','I');
dbms_lock.sleep(30);
--step 2
update_status(id_in,'Entering Step 2','U');
dbms_lock.sleep(30);
--step 3
update_status(id_in,'Entering Step 3','U');
dbms_lock.sleep(30);
update_status(id_in,NULL,'D');
END;
--Run procedure from 1st session
exec sp1(<whatever the sequence value is>);
--Check status from second
select * from status where id = <whatever the sequence value was>