12
返回列表 发新帖
楼主: warehouse

关于sql(trigger 书写)的问题 , 在线?

[复制链接]
论坛徽章:
226
BLOG每日发帖之星
日期:2010-02-11 01:01:06紫蛋头
日期:2013-01-12 23:45:222013年新春福章
日期:2013-02-25 14:51:24问答徽章
日期:2013-10-17 18:06:40优秀写手
日期:2013-12-18 09:29:10马上有车
日期:2014-02-19 11:55:14马上有房
日期:2014-02-19 11:55:14马上有钱
日期:2014-02-19 11:55:14马上有对象
日期:2014-02-19 11:55:14马上加薪
日期:2014-02-19 11:55:14
11#
发表于 2004-12-6 19:30 | 只看该作者
SQL> create table test (id number, aa number, bb number, timestamp1 date, timestamp2 date);

表已创建。

SQL> create or replace trigger v_test1 before insert or update of aa on test for each row
  2  begin
  3  :new.timestamp1 := sysdate;
  4  end;
  5  /

触发器已创建

SQL> create or replace trigger v_test2 before insert or update of bb on test for each row
  2  begin
  3  :new.timestamp2 := sysdate;
  4  end;
  5  /

触发器已创建

SQL> select * from test;

未选定行


SQL> insert into test (id, aa, bb) values (1, 2, 3);

已创建 1 行。

SQL> commit;

提交完成。

SQL> select * from test;

        ID         AA         BB TIMESTAMP1 TIMESTAMP2
---------- ---------- ---------- ---------- ----------
         1          2          3 06-12月-04 06-12月-04

SQL> alter session set nls_date_format = 'yyyy-mm-dd hh24:mi:ss';

会话已更改。

SQL> select * from test;

        ID         AA         BB TIMESTAMP1          TIMESTAMP2
---------- ---------- ---------- ------------------- -------------------
         1          2          3 2004-12-06 19:28:35 2004-12-06 19:28:35

SQL> update test set aa = 3 where id = 1;

已更新 1 行。

SQL> commit;

提交完成。

SQL> select * from test;

        ID         AA         BB TIMESTAMP1          TIMESTAMP2
---------- ---------- ---------- ------------------- -------------------
         1          3          3 2004-12-06 19:29:15 2004-12-06 19:28:35

你先在没有复制的环境中把触发器测试成功,然后在加上复制。

使用道具 举报

回复
论坛徽章:
150
蓝锆石
日期:2011-11-16 22:31:22萤石
日期:2011-11-17 13:05:31祖母绿
日期:2008-06-14 15:23:26海蓝宝石
日期:2011-11-16 22:25:15紫水晶
日期:2011-11-16 22:31:22红宝石
日期:2011-10-09 08:54:30蓝锆石
日期:2009-01-31 15:20:54萤石
日期:2008-12-22 15:22:00祖母绿
日期:2011-11-17 13:13:26海蓝宝石
日期:2008-07-05 14:52:18
12#
 楼主| 发表于 2004-12-6 19:50 | 只看该作者
最初由 yangtingkun 发布
[B]SQL> create table test (id number, aa number, bb number, timestamp1 date, timestamp2 date);

表已创建。

SQL> create or replace trigger v_test1 before insert or update of aa on test for each row
  2  begin
  3  :new.timestamp1 := sysdate;
  4  end;
  5  /

触发器已创建

SQL> create or replace trigger v_test2 before insert or update of bb on test for each row
  2  begin
  3  :new.timestamp2 := sysdate;
  4  end;
  5  /

触发器已创建

SQL> select * from test;

未选定行


SQL> insert into test (id, aa, bb) values (1, 2, 3);

已创建 1 行。

SQL> commit;

提交完成。

SQL> select * from test;

        ID         AA         BB TIMESTAMP1 TIMESTAMP2
---------- ---------- ---------- ---------- ----------
         1          2          3 06-12月-04 06-12月-04

SQL> alter session set nls_date_format = 'yyyy-mm-dd hh24:mi:ss';

会话已更改。

SQL> select * from test;

        ID         AA         BB TIMESTAMP1          TIMESTAMP2
---------- ---------- ---------- ------------------- -------------------
         1          2          3 2004-12-06 19:28:35 2004-12-06 19:28:35

SQL> update test set aa = 3 where id = 1;

已更新 1 行。

SQL> commit;

提交完成。

SQL> select * from test;

        ID         AA         BB TIMESTAMP1          TIMESTAMP2
---------- ---------- ---------- ------------------- -------------------
         1          3          3 2004-12-06 19:29:15 2004-12-06 19:28:35

你先在没有复制的环境中把触发器测试成功,然后在加上复制。 [/B]


谢谢你,我也是这样做了,每一列都创建了一个触发器,通过这样的方式,的确解决了更新同一个表的同一条记录的任意字段,也就是说现在可以任意更新了,我就是觉得麻烦了一点,想创建一个触发器来实现,看来是实现不了啊!

使用道具 举报

回复
论坛徽章:
226
BLOG每日发帖之星
日期:2010-02-11 01:01:06紫蛋头
日期:2013-01-12 23:45:222013年新春福章
日期:2013-02-25 14:51:24问答徽章
日期:2013-10-17 18:06:40优秀写手
日期:2013-12-18 09:29:10马上有车
日期:2014-02-19 11:55:14马上有房
日期:2014-02-19 11:55:14马上有钱
日期:2014-02-19 11:55:14马上有对象
日期:2014-02-19 11:55:14马上加薪
日期:2014-02-19 11:55:14
13#
发表于 2004-12-6 22:25 | 只看该作者
try this

SQL> create table test_aa (id number, aa number, bb number, timestamp1 date, timestamp2 date);

表已创建。

SQL> create or replace trigger v_test_aa before insert or update on test_aa for each row
  2  begin
  3  if ((:new.aa != ld.aa) is null or (:new.aa = ld.aa))  then
  4  :new.timestamp1 := sysdate;
  5  end if;
  6  if ((:new.bb != ld.bb) is null or (:new.bb = ld.bb))  then
  7  :new.timestamp2 := sysdate;
  8  end if;
  9  end;
10  /

触发器已创建

SQL> insert into test_aa (id, aa, bb) values (1, 2, 3);

已创建 1 行。

SQL> select * from test_aa;

        ID         AA         BB TIMESTAMP1          TIMESTAMP2
---------- ---------- ---------- ------------------- -------------------
         1          2          3 2004-12-06 22:20:33 2004-12-06 22:20:33

SQL> update test_aa set bb = 4 where id = 1;

已更新 1 行。

SQL> select * from test_aa;

        ID         AA         BB TIMESTAMP1          TIMESTAMP2
---------- ---------- ---------- ------------------- -------------------
         1          2          4 2004-12-06 22:20:48 2004-12-06 22:20:33

使用道具 举报

回复
论坛徽章:
150
蓝锆石
日期:2011-11-16 22:31:22萤石
日期:2011-11-17 13:05:31祖母绿
日期:2008-06-14 15:23:26海蓝宝石
日期:2011-11-16 22:25:15紫水晶
日期:2011-11-16 22:31:22红宝石
日期:2011-10-09 08:54:30蓝锆石
日期:2009-01-31 15:20:54萤石
日期:2008-12-22 15:22:00祖母绿
日期:2011-11-17 13:13:26海蓝宝石
日期:2008-07-05 14:52:18
14#
 楼主| 发表于 2004-12-7 09:13 | 只看该作者
谢谢你的帮助,克服浮躁 , 继续向你学习! :)

使用道具 举报

回复

您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

TOP技术积分榜 社区积分榜 徽章 团队 统计 知识索引树 积分竞拍 文本模式 帮助
  ITPUB首页 | ITPUB论坛 | 数据库技术 | 企业信息化 | 开发技术 | 微软技术 | 软件工程与项目管理 | IBM技术园地 | 行业纵向讨论 | IT招聘 | IT文档
  ChinaUnix | ChinaUnix博客 | ChinaUnix论坛
CopyRight 1999-2011 itpub.net All Right Reserved. 北京盛拓优讯信息技术有限公司版权所有 联系我们 未成年人举报专区 
京ICP备16024965号-8  北京市公安局海淀分局网监中心备案编号:11010802021510 广播电视节目制作经营许可证:编号(京)字第1149号
  
快速回复 返回顶部 返回列表