[SQL]Wat te doen wanneer subselect NULL geeft

Pagina: 1
Acties:

  • DDemolition
  • Registratie: Augustus 2003
  • Laatst online: 04-02 08:39

DDemolition

slopen is mijn lust en leven

Topicstarter
Bij het invoegen van een record wil ik graag QUERYID ophogen met 1. Dit is per gebruiker, dus gebruiker 1 kan QUERYID 1-5 hebben, maar gebruiker 2 dus ook.
De primarykey declaratie liggen op GEBRUIKER & QUERYID.

Dit statement werkt op zich perfect, alleen bij het toevoegen van het eerste record gaat het fout, omdat het subselect statement een null als uitkomst geeft. Hoe kan ik deze null afvangen?

SQL:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
INSERT INTO
    FLOWFILE.MAXQRY
    (GEBRUIKER,
    QUERYID,
    QUERYNAAM,
    QUERYOMSC,
    TIMECREATE)
VALUES
    ('$NewGebruiker',
    (SELECT 
        MAX(QUERYID) + 1 
     FROM 
        FLOWFILE.MAXQRY 
     WHERE 
        GEBRUIKER = '$NewGebruiker'),
    '$NewQuerynaam',
    '$NewQuerynaam',
    '$NewQuerycreate')


Specs:
AS400 V5r3
DB2
PHP 5.0.4 / Apache 2.0.52

Specs: Server, WS boven, WS beneden


  • wboevink
  • Registratie: September 2004
  • Laatst online: 09-02 17:21
Waarom is QUERYID geen identity (of auto-increment) veld?
NULL afvangen met ISNULL

dus:

MAX(ISNULL(QUERYID,0)) + 1

Tenminste in TSQL

  • justmental
  • Registratie: April 2000
  • Niet online

justmental

my heart, the beat

Ik heb geen ervaring met DB2, maar google vertelt mij dit:
SELECT COALESCE(MAX(QUERYID), 0) + 1 ...

Who is John Galt?


  • Robbemans
  • Registratie: November 2003
  • Laatst online: 17-07-2025
http://www.experts-exchange.com/Databases/Q_20574843.html

oftewel IFNULL of COALESCE

@Wboevink: nee, ISNULL is voor SQL Server, niet voor DB2

[ Voor 26% gewijzigd door Robbemans op 20-07-2006 09:45 ]


  • P_de_B
  • Registratie: Juli 2003
  • Niet online
Volgens mij is het COALESCE in db2 :)

Weet je wel zeker dat dit een goede oplossing is? Je hebt met nogal wat concurrency problemen te maken op deze manier.

Oops! Google Chrome could not find www.rijks%20museum.nl


  • DDemolition
  • Registratie: Augustus 2003
  • Laatst online: 04-02 08:39

DDemolition

slopen is mijn lust en leven

Topicstarter
wboevink schreef op donderdag 20 juli 2006 @ 09:42:
Waarom is QUERYID geen identity (of auto-increment) veld?
omdat QUERYID icm GEBRUIKER de primary key zijn en wil deze ook op die manier ophogen.
SQL:
1
SELECT MAX(ISNULL(QUERYID,0)) + 1

SQL:
1
SELECT ISNULL(MAX(QUERYID),0) + 1

geven:
fout: 42704 ISNULL in *LIBL type *N is niet gevonden.
Waarschijnlijk snapt db2 dit dus niet.
SQL:
1
SELECT COALESCE(MAX(QUERYID),0) + 1

doet het _/-\o_ !

Google gaf bij mij alleen maar voorbeelden van stored procedures icm nullify.

Is dit trouwens een algemene functie, want zie dat oa ook Oracle en PLSQL het ondersteunen?

[ Voor 9% gewijzigd door DDemolition op 20-07-2006 09:58 ]

Specs: Server, WS boven, WS beneden


  • justmental
  • Registratie: April 2000
  • Niet online

justmental

my heart, the beat

In oracle sql en pl/sql is het nvl.

Who is John Galt?

Pagina: 1