Solved

Firebird create a context variable

Posted on 2007-11-20
9
2,098 Views
Last Modified: 2013-12-09
I have a trigger for saving the changes into a history table.

For DELETE and UPDATE i use the context variable "old", and for INSERT i have to use the "new" context variable.

I want to use only ONE trigger for INSERT, UPDATE and DELETE because its easier to mantain it later, and my problem ist that i look for a way to use only one variable for acessing the values from "old" and "new" context variable. Also, if INSERT then i have to use the values from "new" else from "old". But i dondt want to use the both on the same procedure.

Hou can i create a variable and assing the "new" if INSERTING and otherwise the "old" context variable?

0
Comment
Question by:Daniel Junges
  • 3
  • 2
  • 2
  • +1
9 Comments
 
LVL 19

Expert Comment

by:Gary Benade
ID: 20321091
CREATE TRIGGER TEST_ FOR TEST ACTIVE AFTER INSERT OR UPDATE OR DELETE POSITION 0 AS
DECLARE VARIABLE CONTEXTVAR VARCHAR(10);
begin
     IF (INSERTING) THEN
         CONTEXTVAR = OLD.LINK;
     ELSE IF (UPDATING) THEN
         CONTEXTVAR = OLD.LINK;
     ELSE // (DELETING)
        CONTEXTVAR = OLD.LINK;
     // REST OF CODE
end
0
 
LVL 19

Expert Comment

by:NickUpson
ID: 20321169
small correction

CREATE TRIGGER TEST_ FOR TEST ACTIVE AFTER INSERT OR UPDATE OR DELETE POSITION 0 AS
DECLARE VARIABLE CONTEXTVAR VARCHAR(10);
begin
     IF (INSERTING) THEN
         CONTEXTVAR = NEW.LINK;             <-------
     ELSE IF (UPDATING) THEN
         CONTEXTVAR = OLD.LINK;             could be either, depending upon which you want to use
     ELSE // (DELETING)
        CONTEXTVAR = OLD.LINK;
     // REST OF CODE
end

I don't think firebird 2 will allow references to invalid context variables for the trigger defn, If I'm right the above will not be allowed in any trigger as eg, a delete trigger doesn't allow code that refers to a new.field
0
 
LVL 14

Author Comment

by:Daniel Junges
ID: 20322173
this solution i have also applied, but i have a lot of Fields. What im searching is a solution like this:

CREATE TRIGGER ....
DECLARE VARIABLE myRow ROW;
begin
     IF (INSERTING) THEN
         myRow = NEW;
     ELSE IF (UPDATING) THEN
         myRow = NEW;
     ELSE
        myRow = OLD;
    ...
    myRow.CompanyName
    ...
end

0
Free learning courses: Active Directory Deep Dive

Get a firm grasp on your IT environment when you learn Active Directory best practices with Veeam! Watch all, or choose any amount, of this three-part webinar series to improve your skills. From the basics to virtualization and backup, we got you covered.

 
LVL 19

Accepted Solution

by:
NickUpson earned 500 total points
ID: 20322653
you could do it with execute statement

str = 'name = ' || myRow || '.CompanyName';
execute statement str;
0
 
LVL 19

Expert Comment

by:Gary Benade
ID: 20325806
I understand what you are trying to do but since there are no object or array datatypes available to declare in PSQL it isn't possible. Nickupsons last suggestion is the only alternative and it will work but I'm not sure it will achieve your goal of writing simpler code.
0
 
LVL 19

Expert Comment

by:NickUpson
ID: 21341098
I disagree with the Question being deleted, the Question has been answered. It is, perhaps, not the answer that the OP wanted to hear.
0
 
LVL 1

Expert Comment

by:Vee_Mod
ID: 21393913
Force accepted.
Vee_Mod
Experts Exchange Moderator
0
 
LVL 14

Author Comment

by:Daniel Junges
ID: 21393942
i not have received the solution for my problem, so i want to delete this question and have no reason to accept one of these sugestions.
0

Featured Post

Free Tool: IP Lookup

Get more info about an IP address or domain name, such as organization, abuse contacts and geolocation.

One of a set of tools we are providing to everyone as a way of saying thank you for being a part of the community.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

Suggested Solutions

Title # Comments Views Activity
multiple application databases same MSSQL instance 5 77
T-SQL: Do I need CLUSTERED here? 13 62
MySQL Query Using Up Memory 6 51
MS SQL Server COnditional Where statement 7 95
This article explains all about SQL Server Piecemeal Restore with examples in step by step manner.
Read about achieving the basic levels of HRIS security in the workplace.
Video by: Steve
Using examples as well as descriptions, step through each of the common simple join types, explaining differences in syntax, differences in expected outputs and showing how the queries run along with the actual outputs based upon a simple set of dem…
Polish reports in Access so they look terrific. Take yourself to another level. Equations, Back Color, Alternate Back Color. Write easy VBA Code. Tighten space to use less pages. Launch report from a menu, considering criteria only when it is filled…

679 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question