Create Or Replace Trigger Trg_t
Before Insert Or Update Or Delete
On t
For Each Row
DECLARE
X_VCH_ERROR_MSG VARCHAR2(255);
ROWNUMCOUNT NUMBER(10);
STR_NAMETYPENEW NUMBER(10) := 1;
CODE VARCHAR2(20);
CODE2 VARCHAR2(20);
BEGIN
SELECT COUNT(*) INTO ROWNUMCOUNT FROM T;
IF ROWNUMCOUNT >= 10 THEN
UP_T(STR_NAMETYPENEW);
TEST(STR_NAMETYPENEW, CODE, CODE2);
ELSE
DEL_T(STR_NAMETYPENEW);
TEST(STR_NAMETYPENEW, CODE, CODE2);
END IF;
COMMIT;
EXCEPTION
WHEN OTHERS THEN
X_VCH_ERROR_MSG := SUBSTR(SQLERRM(SQLCODE), 1, 100);
DBMS_OUTPUT.PUT_LINE(X_VCH_ERROR_MSG);
END TRG_T;
/
说明:
UP_T(STR_NAMETYPENEW); /*一个update 语句*/
TEST(STR_NAMETYPENEW, CODE, CODE2);/*一个insert 语句(包含游标)*/问题:
为什么 这个触发器执行 总是 倒序执行啊?
就是:先执行 insert 后执行的update 为什么会是这样呢?
Before Insert Or Update Or Delete
On t
For Each Row
DECLARE
X_VCH_ERROR_MSG VARCHAR2(255);
ROWNUMCOUNT NUMBER(10);
STR_NAMETYPENEW NUMBER(10) := 1;
CODE VARCHAR2(20);
CODE2 VARCHAR2(20);
BEGIN
SELECT COUNT(*) INTO ROWNUMCOUNT FROM T;
IF ROWNUMCOUNT >= 10 THEN
UP_T(STR_NAMETYPENEW);
TEST(STR_NAMETYPENEW, CODE, CODE2);
ELSE
DEL_T(STR_NAMETYPENEW);
TEST(STR_NAMETYPENEW, CODE, CODE2);
END IF;
COMMIT;
EXCEPTION
WHEN OTHERS THEN
X_VCH_ERROR_MSG := SUBSTR(SQLERRM(SQLCODE), 1, 100);
DBMS_OUTPUT.PUT_LINE(X_VCH_ERROR_MSG);
END TRG_T;
/
说明:
UP_T(STR_NAMETYPENEW); /*一个update 语句*/
TEST(STR_NAMETYPENEW, CODE, CODE2);/*一个insert 语句(包含游标)*/问题:
为什么 这个触发器执行 总是 倒序执行啊?
就是:先执行 insert 后执行的update 为什么会是这样呢?
解决方案 »
- Access中的是/否类型
- 救命,oracle10g 修改processes值后,监听连不上了
- Oracle新手问题
- 麻烦高手帮忙看看我这个触发器哪里出错了,谢谢
- 通过函数select到的列,如何做为where语句的条件?
- 关于Oracle,行rownum控制的问题
- 关于分组的问题
- HP unix环境下如何建ORACLE的DB?是远程登录,用手工不用图形界面的那种.
- penitent(只取一瓢) 瓢兄请进来,关于ORA-125000:TNS:监听程序无法启动专用服务器进程的问题?
- 600分求助 。
- Oracle函数的例子,把例子运行一遍,你会学到点东西哈!快乐就好!我刚边学边写的。
- 求累加 SQL
Before Update Or Insert Or Delete
On community_subject_base
For Each Row
Declare
x_Vch_Error_Msg Varchar2(255);
Str_Type_Id Number(10);
Str_Name Varchar2(255);
Str_Flag Number(20) := 1;
Str_Appcode Varchar2(20);
Str_Errmsg Varchar2(50);
Cursor Cur_Comm Is
Select Log.Com_Id, Log.Com_Name
From Community_Subject_Base Log
Order By Log.Com_Id Asc;Begin Update t Set t.Charcontent = '不好使了!'; Begin
--Insert Into t (id,charcontent,dd) Values (234234,'asdfasfasf',Sysdate);
If Cur_Comm%Isopen Then
Close Cur_Comm;
End If;
If Str_Flag = '1' Then
Open Cur_Comm;
Loop
Fetch Cur_Comm
Into Str_Type_Id, Str_Name;
Exit When Cur_Comm%Notfound;
Begin
Insert Into t
(Id, Charcontent, Dd)
Values
(Str_Type_Id, Str_Name, Sysdate);
Exception
When Others Then
Str_Appcode := Sysdate || Sqlcode;
Str_Errmsg := '插入数据错误' || Sqlerrm;
Rollback;
Return;
End;
Close Cur_Comm;
End Loop;
Commit;
End If;
Exception
When Others Then
x_Vch_Error_Msg := Substr(Sqlerrm(Sqlcode), 1, 100);
Dbms_Output.Put_Line(x_Vch_Error_Msg);
End;
End;我转贴了一个 简单的描述,如上:就是 这个触发器总是先执行了insert 后把insert数据全部update了,不知道为什么是这么个流程?