Solved

Firebird create a context variable

Posted on 2007-11-20
9
2,120 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
[X]
Welcome to Experts Exchange

Add your voice to the tech community where 5M+ people just like you are talking about what matters.

  • Help others & share knowledge
  • Earn cash & points
  • Learn & ask questions
  • 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
Do you have a plan for Continuity?

It's inevitable. People leave organizations creating a gap in your service. That's where Percona comes in.

See how Pepper.com relies on Percona to:
-Manage their database
-Guarantee data safety and protection
-Provide database expertise that is available for any situation

 
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

Learn how to optimize MySQL for your business need

With the increasing importance of apps & networks in both business & personal interconnections, perfor. has become one of the key metrics of successful communication. This ebook is a hands-on business-case-driven guide to understanding MySQL query parameter tuning & database perf

Question has a verified solution.

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

This post contains step-by-step instructions for setting up alerting in Percona Monitoring and Management (PMM) using Grafana.
In this blog post, we’ll look at how ClickHouse performs in a general analytical workload using the star schema benchmark test.
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…

623 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