Subject Re: How can I skip an Insert ?
Author yazbeckmona
--- In firebird-support@yahoogroups.com, Steve Wiser <steve@s...>
wrote:
> On Thu, 2005-08-11 at 15:17 +0000, yazbeckmona wrote:
>
> > --- In firebird-support@yahoogroups.com, "Adam" <s3057043@y...>
wrote:
> > > --- In firebird-support@yahoogroups.com, "yazbeckmona"
> > > <yazbeckmona@y...> wrote:
> > > > Hello,
> > > >
> > > > I would like to add something to my trigger "BeforeInsert"
that
> > > would
> > > > ignore every line that is already in the database. How could
I do
> > > > that, I have absolutely no idea, I never worked with trigger
> > > before! I
> > > > need to NOT insert lines that is already in the database (of
> > > course,
> > > > because now I have some primary key duplicate error). (And I
> > don't
> > > > want to change my SQL query, because I tried already
everything
> > and
> > > it
> > > > is terribly long.)
> > > >
> > > > Here's my trigger with a key generator:
> > > > AS
> > > > BEGIN
> > > > if (NEW.idemployeur IS null) then
> > > > NEW.idEmployeur = GEN_ID(G_EmployeuridEmployeurGen7, 1);
> > > > END
> > > >
> > > > Thank you so much for any help!
> > >
> > > Triggers do not appear to be what you want.
> > >
> > > You seem a little confused about the role of the queries etc.
> > > Firebird will raise an exception if your primary key is not
unique.
> > > In other words, you must be supplying a idEmployeur that is
already
> > > in the table (a duplicate), and that is against the whole
concept
> > of
> > > a primary key. Your application should catch the exception and
> > react
> > > accordingly. It would be very confusing logic to have the
database
> > > quietly eat any duplicate data, you would not then know where
your
> > > record went. Instead, you now have a mechanism where the
database
> > > informs you that the query operation failed, and why it failed.
Use
> > > it to your advantage.
> > >
> > > In fact, the way you would do input validation in the before
insert
> > > trigger would be to raise a custom exception to prevent the
insert
> > > from succeeding.
> > >
> > > Adam
> >
> > Hello,
> >
> > The thing I am trying to do is that I have 2 tables (tab1 and
tab2).
> > I want to store the data form tab1 in tab2 IF tab2 doesn't
already
> > have it. It is so simple, I do this usually but now, the table
are
> > too large and when I write my query using something like
> > INSERT id, c1, c2, c3 IN tab2 FROM tab1 WHERE NOT EXISTS (SELECT
id
> > FROM tab2 WHERE tab1.id = tab2.id) it is really terribly long.
>
>
> This query is slow even when you are searching by the primary key?
>


Yes it is, and they are indexes!



>
> >
> > So that's why I wanted to skip the insert instead. So How can I
write
> > a try and catch exception in the trigger? Hopping it will be a
little
> > faster than the query...
> >
> > thanks
> >
> >
> >
> >
> >
> >
> >
> > ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
> >
> > Visit http://firebird.sourceforge.net and click the Resources item
> > on the main (top) menu. Try Knowledgebase and FAQ links !
> >
> > Also search the knowledgebases at http://www.ibphoenix.com
> >
> > ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
> >
> > Yahoo! Groups Links
> >
> >
> >
> >
> >
> >
> >
>
>
> [Non-text portions of this message have been removed]