Solved

Firebird create a context variable

Posted on 2007-11-20
9
2,091 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
What is SQL Server and how does it work?

The purpose of this paper is to provide you background on SQL Server. It’s your self-study guide for learning fundamentals. It includes both the history of SQL and its technical basics. Concepts and definitions will form the solid foundation of your future DBA expertise.

 
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

Efficient way to get backups off site to Azure

This user guide provides instructions on how to deploy and configure both a StoneFly Scale Out NAS Enterprise Cloud Drive virtual machine and Veeam Cloud Connect in the Microsoft Azure Cloud.

Question has a verified solution.

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

APEX (Application Express) is used to develop a web application from Oracle. SQL Workshop is one of the tools that comes with Oracle APEX to query or modify the database objects or to make any changes to the structure.
Entering a date in Microsoft Access can be tricky. A typo can cause month and day to be shuffled, entering the day only causes an error, as does entering, say, day 31 in June. This article shows how an inputmask supported by code can help the user a…
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…

809 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