亚洲av成人无遮挡网站在线观看,少妇性bbb搡bbb爽爽爽,亚洲av日韩精品久久久久久,兔费看少妇性l交大片免费,无码少妇一区二区三区

  免費(fèi)注冊 查看新帖 |

Chinaunix

  平臺 論壇 博客 文庫
最近訪問板塊 發(fā)新帖
查看: 4472 | 回復(fù): 3
打印 上一主題 下一主題

求助:各位兄臺,誰有 PostgreSQL trigger 和存儲過程的例子給一個(gè). [復(fù)制鏈接]

論壇徽章:
0
跳轉(zhuǎn)到指定樓層
1 [收藏(0)] [報(bào)告]
發(fā)表于 2011-08-25 10:55 |只看該作者 |倒序?yàn)g覽
最近有項(xiàng)目要用到 PostgreSQL ,原來系統(tǒng)中有很多 trigger, 按照 PostgreSQL 的官方文檔,實(shí)驗(yàn)了N遍都不成功,已經(jīng)被它折磨的無語了.
各位兄臺,有使用過PostgreSQL的,請給一些Trigger,存儲過程,用戶函數(shù)的例子.
謝謝了!

論壇徽章:
59
2015七夕節(jié)徽章
日期:2015-08-24 11:17:25ChinaUnix專家徽章
日期:2015-07-20 09:19:30每周論壇發(fā)貼之星
日期:2015-07-20 09:19:42ChinaUnix元老
日期:2015-07-20 11:04:38榮譽(yù)版主
日期:2015-07-20 11:05:19巳蛇
日期:2015-07-20 11:05:26CU十二周年紀(jì)念徽章
日期:2015-07-20 11:05:27IT運(yùn)維版塊每日發(fā)帖之星
日期:2015-07-20 11:05:34操作系統(tǒng)版塊每日發(fā)帖之星
日期:2015-07-20 11:05:36程序設(shè)計(jì)版塊每日發(fā)帖之星
日期:2015-07-20 11:05:40數(shù)據(jù)庫技術(shù)版塊每日發(fā)帖之星
日期:2015-07-20 11:05:432015年辭舊歲徽章
日期:2015-07-20 11:05:44
2 [報(bào)告]
發(fā)表于 2011-08-25 11:58 |只看該作者
官方的文檔中的不行嗎?

論壇徽章:
0
3 [報(bào)告]
發(fā)表于 2011-08-26 09:53 |只看該作者
本帖最后由 zlj2208 于 2011-08-26 09:55 編輯

自己搞定了!
我使用Aqua Data Studio 4.7 連接數(shù)據(jù)庫,按照官方文檔做實(shí)驗(yàn),報(bào)各種錯(cuò)誤, 后來同事在psql的命令行執(zhí)行建立 triigger 和 function 的語句好用,然后就在命令行上做實(shí)驗(yàn),問題解決了。
后來使用pgAdmin III圖形工具也可以,不管怎么樣問題解決了。下面是我的示例,希望對其他朋友有用。
Postgresql的例子太少了!那是相當(dāng)少!

目的:對于基本表執(zhí)行 insert,update,delete  在Log表中記錄相關(guān)的操作內(nèi)容。
1. 對基本表進(jìn)行 insert 后會在log表中生成一條和基本表中相同的記錄;
2. 對基本表進(jìn)行 update 后會在log表中生成對基本表更新前和更新后2條記錄;
3. 對基本表進(jìn)行 delete 后會在log表中生成一條和基本表中相同的記錄;
如果出現(xiàn)誤操作可以通過log表來修正數(shù)據(jù).

連接數(shù)據(jù)庫工具: pgAdmin III
實(shí)驗(yàn)步驟:
1. 建立基本表和log表
  1. create table testtable (
  2.   id integer not null primary key ,
  3.   sname varchar(100)
  4. );

  5. CREATE SEQUENCE seq_no1 MINVALUE 1;

  6. CREATE TABLE logtesttable (
  7.   logtestid INTEGER PRIMARY KEY DEFAULT NEXTVAL('seq_no1'),
  8.   id INTEGER,
  9.   sname VARCHAR(100),
  10.   updt_type VARCHAR(20) ,
  11.   updt_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP
  12. );
復(fù)制代碼
2. 建立 Trigger 和 Function
  1. ---------------------------------------------
  2. --創(chuàng)建trigger調(diào)用的函數(shù)
  3. --
  4. CREATE OR REPLACE FUNCTION fun_trigger_insert()
  5. RETURNS TRIGGER
  6. LANGUAGE PLPGSQL
  7. AS
  8. $BODY$
  9. BEGIN
  10.   INSERT INTO logtesttable(id,sname,updt_type,updt_time)
  11.   VALUES(new.id,new.sname,'insert',current_timestamp);
  12. return new;
  13. END;
  14. $BODY$;

  15. CREATE OR REPLACE FUNCTION fun_trigger_update()
  16. RETURNS TRIGGER
  17. LANGUAGE PLPGSQL
  18. AS
  19. $BODY$
  20. BEGIN
  21.   INSERT INTO logtesttable(id,sname,updt_type,updt_time)
  22.   VALUES(OLD.id,OLD.sname,'before_update',current_timestamp);
  23.   INSERT INTO logtesttable(id,sname,updt_type,updt_time)
  24.   VALUES(new.id,new.sname,'after_update',current_timestamp);
  25. return new;
  26. END;
  27. $BODY$;

  28. CREATE OR REPLACE FUNCTION fun_trigger_delete()
  29. RETURNS TRIGGER
  30. LANGUAGE PLPGSQL
  31. AS $BODY$
  32. BEGIN
  33.   INSERT INTO logtesttable(id,sname,updt_type,updt_time)
  34.   VALUES(OLD.id,OLD.sname,'delete',current_timestamp);
  35. return OLD;
  36. END;
  37. $BODY$;

  38. -----------------------
  39. --建立Trigger
  40. --
  41. CREATE TRIGGER TRIGGER_INSERT
  42. AFTER INSERT ON testtable
  43. FOR EACH ROW EXECUTE PROCEDURE fun_trigger_insert();

  44. CREATE TRIGGER TRIGGER_UPDATE
  45. AFTER UPDATE ON testtable
  46. FOR EACH ROW EXECUTE PROCEDURE fun_trigger_update();

  47. CREATE TRIGGER TRIGGER_DELETE
  48. AFTER DELETE ON testtable
  49. FOR EACH ROW EXECUTE PROCEDURE fun_trigger_delete();
復(fù)制代碼
3. 檢驗(yàn)Trigger是否生效
1). insert 操作
  1. insert into testtable values (10,'aaaaa');
  2. insert into testtable values (20,'bbbbb');
復(fù)制代碼
查詢數(shù)據(jù)庫結(jié)果:
  1. select * from testtable;
  2. select * from logtesttable;
  3. ------------------------
  4. 輸出結(jié)果:
  5. ------------------------
  6. id     sname   
  7. -----  --------
  8. 10     aaaaa   
  9. 20     bbbbb   

  10. 2 record(s) selected [Fetch MetaData: 0/ms] [Fetch Data: 0/ms]

  11. [Executed: 11-8-26 上午09時(shí)49分05秒 ] [Execution: 0/ms]

  12. logtestid     id     sname     updt_type     updt_time                  
  13. ------------  -----  --------  ------------  --------------------------
  14. 1             10     aaaaa     insert        2011-08-26 09:42:14.711853
  15. 2             20     bbbbb     insert        2011-08-26 09:42:14.711853

  16. 2 record(s) selected [Fetch MetaData: 0/ms] [Fetch Data: 0/ms]

  17. [Executed: 11-8-26 上午09時(shí)49分05秒 ] [Execution: 0/ms]

復(fù)制代碼
2). update 操作
  1. update testtable set sname='xxxxxx' where id=20;
復(fù)制代碼
查詢數(shù)據(jù)庫結(jié)果:
  1. select * from testtable where id=20;
  2. select * from logtesttable where id=20;
  3. ------------------------
  4. 輸出結(jié)果:
  5. ------------------------
  6. id     sname   
  7. -----  --------
  8. 10     aaaaa   
  9. 20     xxxxxx   

  10. 2 record(s) selected [Fetch MetaData: 0/ms] [Fetch Data: 0/ms]

  11. [Executed: 11-8-26 上午09時(shí)49分55秒 ] [Execution: 0/ms]

  12. logtestid     id     sname     updt_type      updt_time                  
  13. ------------  -----  --------  -------------  --------------------------
  14. 1             10     aaaaa     insert         2011-08-26 09:42:14.711853
  15. 2             20     bbbbb     insert         2011-08-26 09:42:14.711853
  16. 3             20     bbbbb     before_update  2011-08-26 09:43:21.574783
  17. 4             20     xxxxxx    after_update   2011-08-26 09:43:21.574783

  18. 4 record(s) selected [Fetch MetaData: 0/ms] [Fetch Data: 0/ms]

  19. [Executed: 11-8-26 上午09時(shí)49分55秒 ] [Execution: 0/ms]
復(fù)制代碼
3). delete 操作
  1. delete from testtable where id=20;
復(fù)制代碼
查詢數(shù)據(jù)庫結(jié)果:
  1. select * from testtable;
  2. select * from logtesttable;
  3. ------------------------
  4. 輸出結(jié)果:
  5. ------------------------
  6. id     sname   
  7. -----  --------
  8. 10     aaaaa   

  9. 1 record(s) selected [Fetch MetaData: 0/ms] [Fetch Data: 0/ms]

  10. [Executed: 11-8-26 上午09時(shí)51分21秒 ] [Execution: 0/ms]

  11. logtestid     id     sname     updt_type      updt_time                  
  12. ------------  -----  --------  -------------  --------------------------
  13. 1             10     aaaaa     insert         2011-08-26 09:42:14.711853
  14. 2             20     bbbbb     insert         2011-08-26 09:42:14.711853
  15. 3             20     bbbbb     before_update  2011-08-26 09:43:21.574783
  16. 4             20     xxxxxx    after_update   2011-08-26 09:43:21.574783
  17. 5             20     xxxxxx    delete         2011-08-26 09:44:44.509704

  18. 5 record(s) selected [Fetch MetaData: 0/ms] [Fetch Data: 0/ms]

  19. [Executed: 11-8-26 上午09時(shí)51分21秒 ] [Execution: 16/ms]
復(fù)制代碼

論壇徽章:
0
4 [報(bào)告]
發(fā)表于 2011-09-08 16:26 |只看該作者
多謝樓主,很不錯(cuò)的例子
您需要登錄后才可以回帖 登錄 | 注冊

本版積分規(guī)則 發(fā)表回復(fù)

  

北京盛拓優(yōu)訊信息技術(shù)有限公司. 版權(quán)所有 京ICP備16024965號-6 北京市公安局海淀分局網(wǎng)監(jiān)中心備案編號:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年舉報(bào)專區(qū)
中國互聯(lián)網(wǎng)協(xié)會會員  聯(lián)系我們:huangweiwei@itpub.net
感謝所有關(guān)心和支持過ChinaUnix的朋友們 轉(zhuǎn)載本站內(nèi)容請注明原作者名及出處

清除 Cookies - ChinaUnix - Archiver - WAP - TOP