Computer Webmaster Gaming Console Graphics Forum

Welcome to the Computer Webmaster Gaming Console Graphics Forum forums.

You are currently viewing our boards as a guest which gives you limited access to view most discussions and access our other features. By joining our free community you will have access to post topics, communicate privately with other members (PM), respond to polls, upload content and access many other special features. Registration is fast, simple and absolutely free so please, join our community today!

If you have any problems with the registration process or your account login, please contact contact us.

MK PitStop Main Earn $25 Earn Money Posting Extras Members Blogs Image Hosting User Pages
Go Back   Computer Webmaster Gaming Console Graphics Forum > Webmaster Forum > Website Coding > Database
Register FAQ/Rules Become A V.I.P. Member Search Today's Posts Mark Forums Read

Database Database problems or need to ask a question? maybe something to do with sql injections or a database software question. Database topics cover MySQL, PostgreSQL, Oracle, SQL Server or anything else related to databases.

Google
Closed Thread
 
LinkBack Thread Tools Display Modes
Old 07-02-2007, 10:59 AM   #1
renyald
 
renyald's Avatar
 
Posts: n/a
My Photos: (0)

Banked:
MK Cash: $

I am Worth:
MK Cash: $
Donate

Recent Blog: None

Default how to getting column or field name

guys...i want to get field name from table with trigger...i mean when
i update field(s).. i get the field name
to insert into table history..so i can make history with field:
update_by, update_date, field_name, Old_value,new_value.

 
Add Post to del.icio.usBookmark Post in TechnoratiFurl this Post!Spurl this Post!Reddit!
Old 07-02-2007, 11:00 AM   #2
Kees Nuyt
 
Kees Nuyt's Avatar
 
Posts: n/a
My Photos: (0)

Banked:
MK Cash: $

I am Worth:
MK Cash: $
Donate

Recent Blog: None

Default how to getting column or field name

On Tue, 26 Jun 2007 20:50:42 -0700, renyald <ndotuk@gmail.com>
wrote:

>guys...i want to get field name from table with trigger...i mean when
>i update field(s).. i get the field name
>to insert into table history..so i can make history with field:
>update_by, update_date, field_name, Old_value,new_value.


There are better ways to make an audit trail.

Joe Celko has a good chapter on temporal data
in his book "SQL for smarties" [1].

Some time ago I found a bash script from Mike Chirico
which maintains a notes database:
http://souptonuts.sourceforge.net/code/n.html
and changed it to my liking as a
demonstration of temporal data [2].

Editing it for publication here may have introduced some
mistakes, testing is left to you

.... but I'm not sure this may solve your problem.
Your proposal has a potential problem with the data type of the
changed values, usually not every column has the same type.

An alternative is to have the trigger store a copy of the
complete row on every update; optionally set unchanged columns
to NULL using CASE constructs.
In a variable length row, a NULL doesn't take much space.

References and quotes:
[1]
Google for ISDN-13: 978-0-12-369379-2

[2]
-- Syntax is sqlite (close to SQL 92),
-- http://www.sqlite.org/lang.html
-- converting to MySQL is left as
-- an exercise for the reader.
-- define schema
BEGIN TRANSACTION;

DROP TABLE IF EXISTS notes;
CREATE TABLE notes (
-- ROWID, you may need AUTO_INCREMENT here,
-- but a real candidate key will be even better.
nkey INTEGER PRIMARY KEY,
-- category left out in this demo
msg TEXT
);

-- '9999-12-31 23:59:59' means 'end-of-times'
DROP TABLE IF EXISTS audit;
CREATE TABLE audit (
nkey INTEGER,
-- category left out in this demo
msg TEXT,
timeFr DATETEXT,
timeTo DATETEXT DEFAULT '9999-12-31 23:59:59',
PRIMARY KEY (nkey,timeFr)
);

CREATE TRIGGER audit_insert_notes
AFTER INSERT ON notes FOR EACH ROW
BEGIN
INSERT INTO audit (nkey, msg, timeFr)
VALUES (new.nkey, new.msg, CURRENT_TIMESTAMP);
END;

CREATE TRIGGER audit_update_notes
AFTER UPDATE ON notes FOR EACH ROW
BEGIN
UPDATE audit SET timeTo = CURRENT_TIMESTAMP
WHERE nkey == new.nkey
AND timeTo == '9999-12-31 23:59:59';
INSERT INTO audit (nkey, msg, timeFr)
VALUES (new.nkey, new.msg, CURRENT_TIMESTAMP);
END;

CREATE TRIGGER audit_delete_notes
AFTER DELETE ON notes FOR EACH ROW
BEGIN
UPDATE audit SET timeTo = CURRENT_TIMESTAMP
WHERE nkey == old.nkey
AND timeTo == '9999-12-31 23:59:59';
END;

DROP VIEW IF EXISTS sh_audit;
CREATE VIEW sh_audit AS
SELECT *,
strftime('%H:%M:%S',
(strftime('%s',CASE timeTo
WHEN '9999-12-31 23:59:59' THEN CURRENT_TIMESTAMP
ELSE timeTo
END) - strftime('%s',timeFr)),'unixepoch') AS lifespan
FROM audit
ORDER BY nkey,timeFr;

DROP VIEW IF EXISTS sh_status;
CREATE VIEW sh_status AS
SELECT
COUNT(CASE
WHEN timeTo == '9999-12-31 23:59:59' THEN 1
ELSE NULL
END) AS active,
COUNT(CASE
WHEN timeTo < CURRENT_TIMESTAMP THEN 1
ELSE NULL
END) AS deleted
FROM audit
GROUP BY nkey;

COMMIT; -- done definitions

-- test data
INSERT INTO notes (msg) VALUES ('note 1 version 1');
INSERT INTO notes (msg) VALUES ('note 2 version 1');
UPDATE notes SET msg = 'note 1 version 2' WHERE nkey == 1;
UPDATE notes SET msg = 'note 2 version 2' WHERE nkey == 2;
UPDATE notes SET msg = 'note 1 version 3' WHERE nkey == 1;

-- queries
SELECT * FROM sh_audit;
SELECT * FROM sh_status;

SELECT 'notes';
SELECT * FROM notes;

SELECT 'audit';
SELECT * FROM audit;

SELECT 'audit with timediff';
SELECT * FROM sh_audit;

--
( Kees
)
c[_] All wiyht. Rho sritched mg kegtops awound? (#104)
 
Add Post to del.icio.usBookmark Post in TechnoratiFurl this Post!Spurl this Post!Reddit!
Featured Websites
Free Space
Free Space
Free Space Free Space
Closed Thread
Tags: , , ,




Currently Active Users Viewing This Thread: 1 (0 members and 1 guests)
 
Thread Tools
Display Modes

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

vB code is On
Smilies are On
[IMG] code is On
HTML code is Off
Trackbacks are On
Pingbacks are On
Refbacks are On

Similar Threads
Thread Thread Starter Forum Replies Last Post
How can I get just one row from selected column? Leszek Database 7 07-01-2007 6:43 PM
Calculated column in a table? Morten Database 0 06-26-2007 12:09 AM
Order by column from other table Pawel Ratajczak Database 3 06-26-2007 12:08 AM
column with type VARCHAR ChasW Database 0 05-31-2007 8:43 PM


Featured Websites




All times are GMT +1. The time now is 12:15 AM.


Powered by: vBulletin Copyright ©2000 - 2008, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO 3.0.0
Cheap Computers
MK PitStop Copyright 2005 - 2008

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98