Hi,

> > > merge into t1 tab2
> > > using t1 tab1
> > > on tab1.name = tab2.name and tab1.name = 'ZZZZZ'
> > > when not matched then
> > > insert (type, name, sysid, flag) values (1, 'ZZZZZ', 1, 0)

> Whoops, I spoke too soon as I had tested it on a table with 1 row first and 
> it appeared to work.
>
> The above statement seems to do a separate insert for each row in table which 
> does not match the test.
>
> So, when I tested it on a table which had 100 rows (non matching the 'ZZZZZ' 
> test), it inserted 100 new rows, each with a 'ZZZZ' name.

Yes, if you want to use this trick, the _source_ table should have 1 row.

So this works:

  merge
    into emp
    using (select 'mango' fruits from rdb$database) src
    on emp.fruits = src.fruits
    when not matched then insert (fruits) values ('mango')

An SP would probably be nicer though - then you can parameterize the input.

Alternatively, you can create a temporary table (or a permanent source table 
that you empty afer each use), fill it with the fruits you want to insert, and 
then do this:

  merge
    into emp
    using temp
    on emp.fruits = temp.fruits
    when not matched then insert (fruits) values (temp.fruits)


Cheers,
Paul Vinkenoog

Reply via email to