[PGSQL] Ordered table

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Lead Java Developer

Dit ga je doen Je taken bestaan onder andere uit: Het aansturen van een development team bestaande uit 8 collega's op technisch maar ook HR gebied; Het maken van strategische keuzes omtrent de (nieuw)bouw van deze applicatie; Het maken van technische ontwerpen; Hands-on mee ontwikkelen met het team (met o.a. Java, Spring, Angular, REST); Reviewen van code en feedback geven op collega developers. Hier ga je werken Als Lead Software Developer ben je verantwoordelijk voor één van de vier Agile Java ontwikkelteams die bouwen aan technologie die duizenden instanties wereldwijd verbindt. Dit Agile team, data Jira en Confluence gebruikt en

Bekijk vacature »

Back-end programmeur

Functieomschrijving Heb jij kort geleden jouw HBO ICT diploma in ontvangst mogen nemen? Of ben je toe aan een nieuwe uitdaging? Voor een uitdagende werkgever in omgeving Waalwijk zijn wij op zoek naar een enthousiaste softwareontwikkelaar met kennis of ervaring met C# en SQL. In een uitdagende rol als C#.NET Developer werk je samen met een enthousiast en informeel team aan het bouwen van maatwerk software voor variërende klanten. Verder ziet jouw takenpakket er als volgt uit: Je draagt bij aan de implementatie van aanpassingen, verbeteringen en aanvullingen in de C# based applicaties; Je houdt je bezig met het ontwikkelen

Bekijk vacature »

Senior, Medior and Junior SAP HANA Developer

Vacature details Vakgebied: Software/IT Opleiding: Medior Werklocatie: Veldhoven Vacature ID: 12696 Introductie Our client is the world's leading provider of lithography systems for the semiconductor industry, manufacturing complex machines that are critical to the production of integrated circuits or chips. Our purpose is “unlocking the potential of people and society by pushing technology to new limits”. We do this guided by the principles “Challenge”, “Collaborate” and “Care”. Wat verwachten we van jou? SAP Certified Application Associate - SAP HANA Cloud Modeling (training and/or certification) Bachelor degree or higher Excellent understanding of SAP HANA (2.0 / Cloud), Data Modelling and writing

Bekijk vacature »

Software Programmeur PHP - JAVA

Functie Wil jij bij een platte en informele organisatie werken? Lees dan snel verder! Voor een opdrachtgever in omgeving Boskoop dat zich gespecialiseerd heeft in het realiseren van veilige netwerkverbindingen zijn wij op zoek naar een leuke software developer ter versterking van het huidige team. Hoe kan jouw dag er straks uitzien? Je gaat technische klussen uitvoeren op locatie bij klanten.Je onderhoudt contact met de projectleider om er zeker van te zijn dat een projecten goed verlopen. Je gaat klanten ondersteunen op het gebied van geleverde software en webapplicaties. Je gaat software en webapplicaties ontwikkelen met behulp van de talen

Bekijk vacature »

Front-end developer

Functie Als front-end developer kom je te werken in een team van 30 gedetacheerde, en het team is momenteel flink aan het groeien. Je hebt ervaring met het bouwen van complexe bedrijfsapplicaties waar je gebruik maakt van de nieuwste technologieën waarmee jij elke klant omver blaast. Het gaat om uitdagende projecten met een gemiddelde doorlooptijd van 2 jaar. Hierdoor heb jij echt de volledige focus op een project en kun je flinke impact maken. Het team zit boordevol met ervaren developers die samen dezelfde ambitie delen. Aan de hand van opleidingen en trainingen kun je certificaten halen in jouw expertise

Bekijk vacature »

.NET developer

Klaar voor een nieuwe uitdaging? Welke technologieën gaan schuil achter de dagelijkse energievoorziening? Als senior .NET developer bij Kenter maak jij samen met je team het verschil, zowel voor de interne organisatie als voor eindklanten. Samen bouwen jullie aan innovatieve dienstverlening met behulp van de nieuwste technologieën en tools. Het is een functie met veel vrijheid, goede arbeidsvoorwaarden én je draagt jouw steentje bij aan de energietransitie. Klinkt dit als iets voor jou? Lees dan verder of solliciteer direct! Wat ga je doen als senior .NET developer? Als senior .NET developer bij Kenter (onderdeel van Alliander) ben je van onschatbare

Bekijk vacature »

Back-end developer

Functieomschrijving Voor een gewaardeerde werkgever in regio Tilburg zijn wij op zoek naar een gemotiveerde SQL Developer/ functioneel consultant. Jij wordt verantwoordelijk voor zowel het ontwerpen en implementeren van SQL-databases als voor het in kaart brengen van de bedrijfsprocessen van een organisatie en het vertalen van deze processen naar IT-oplossingen. Jouw takenpakket komt als volgt uit te zien: Ontwerp en implementatie van SQL-databases: Je ontwerpt, ontwikkelt en implementeert SQL-databases om de data behoeften van de organisatie te ondersteunen; Analyse van bedrijfsprocessen: Je analyseert de bedrijfsprocessen van de organisatie om de behoeften van de klant te begrijpen en te vertalen naar

Bekijk vacature »

Front-end developer gezocht

Functie Je komt in een team met ambitieuze developers die de passie voor Front-End met jou delen. Samen ga je aan de slag met leuke en leerzame opdrachten. Het team heeft een eigen budget en financiën en zij bepalen zelf hoe dat besteed en investeert wordt. Je gebruikt tools als JavaScript, Node.js, React, Angular, Typescript en Vue.js wanneer je werkt aan de opdrachten. Daarnaast zul je veel leren van je collega’s en gezamenlijk een leuke tijd doorbrengen tijdens activiteiten zoals wintersport, hackatons en conferentiebezoeken. Je krijgt niet alleen de mogelijkheid Front-End te ontwikkelen, maar ook vooral jezelf. Dit kan behaald

Bekijk vacature »

.NET Developer Shared Driving

Bedrijfsomschrijving Onze klant richt zich op het toegankelijker maken van steden, een fantastisch mooi streven. Hoe ze dat doen? Met eigen ontwikkelde software, waarmee vervoersmiddelen gedeeld kunnen worden. Deze inspirerende werkgever maakt een maatschappelijke impact en dat doen ze nu al zo'n 25 jaar! Het bedrijf is gevestigd in het centrum van Rotterdam en kent ongeveer zo'n 90 medewerkers. Het personeel is lekker gewoon gebleven! Iedereen kleedt zich zoals hij of zij dat zou willen en de sfeer is er erg fijn. Een leuke werkgever om voor te werken, en bovendien zijn er voor jou als Software Developer veel mooie

Bekijk vacature »

C# .NET Ontwikkelaar ASP.NET

Samengevat: Deze werkgever is een inkooporganisatie. Ben jij een ervaren .Net ontwikkelaar? Heb je ervaring met .Net en C#? Vaste baan: C# .NET Developer .Net MBO HBO €3.100 - €4.300 Onze missie is: “Een essentiële bijdrage leveren aan het verlagen van de integrale kostprijs van de aangesloten groothandels, middels het bundelen van inkoopvolume en het creëren van synergie met en tussen de groothandels en leveranciers, met scherpe inkoopprijzen, goede handelscondities en gerichte dienstverlening als resultaat” Zij werken voor MKB klanten. Deze werkgever heeft veel verschillende projecten. Houd jij van afwisseling? Dan zit je bij hun goed! De branche van dit

Bekijk vacature »

.Net developer

Sogeti is een organisatie met een goede werksfeer en zo min mogelijk hiërarchische verhoudingen. Ga je bij ons als .Net Developer aan de slag? Dan werk je dagelijks met collega’s aan de mooiste IT-projecten. Als developer bouw je in DevOps teams aan enterprise applicaties, nieuwe IOT, Chatbots of AI oplossingen. Deze snelgroeiende groep collega’s krijgt energie van hun vak en dat merk je op de werkvloer. Natuurlijk krijg jij de mogelijkheid je te certificeren in dit vakgebied. We organiseren regelmatig technische Meet-ups en doen we veel aan kennisdeling. Mede hierdoor zij wij vorig jaar Microsoft Partner of the year geworden.

Bekijk vacature »

Front-end (Angular) developer - remote werken

Functie Als Front-end (Angular) developer ga je aan de slag met het uitbouwen van hun webapplicatie, als één van de front-end experts ga je samen met collega’s in een devops team werken aan een nieuw front-end voor hun calculatie oplossing. Binnen de calculatiesoftware kunnen meerdere professionals tegelijk samenwerken, 3D calculaties uitvoeren en ook inzien met de benodigde specifieke details. Deze software wordt veel ingezet om projectbeschrijvingen en kosten in kaart te brengen, en tijdens de uitvoering te bewaken. Maar hiernaast liggen er in de toekomst veel meer plannen op het gebied van front-end in de andere applicaties. Genoeg te doen

Bekijk vacature »

.NET Developer Microservices

Dit ga je doen Je taken zullen voornamelijk bestaan uit: Het ontwikkelen van software, inclusief vormgeving, implementaties, integraties en (automatisch) testen (.NET, C#, Azure, Docker, Microservices, Angular); Het in kaart brengen van software requirements; Zorgen dat jouw code kwalitatief hoogstaand is; Het uitvoeren van risico analyses; Een bijdrage leveren aan het continuous quality improvement process. Hier ga je werken Dat kanker een verschrikkelijke ziekte is die de wereld uit geholpen moet worden, is duidelijk. Binnen deze Gelderse organisatie die duizenden ziekenhuizen van producten voorziet, proberen ze daar via technische innovaties aan bij te dragen. Samen met 10 collega .NET developers

Bekijk vacature »

Software developer

Functie Momenteel zijn ze op zoek naar een Software developer die, veelal fullstack, mee gaat werken aan de ontwikkeling van de producten en zo helpt aan de uitvoering van hun ontwikkelprojecten. Je komt te werken binnen hun development team bestaande uit 6 ontwikkelaars. Ze staan zowel open voor meer junior als medior/senior developers. Je kunt snel veel verantwoordelijkheid krijgen en doorgroeien binnen het bedrijf. Bovendien ben je betrokken bij het bepalen van de product roadmap en de inbreng van (nieuwe) technologieën. De applicaties waaraan je werk worden gebruikt op onderwijsinstellingen door heel Nederland. De tech-stack bestaat voornamelijk uit Laravel (PHP),

Bekijk vacature »

Gezocht: .Net ontwikkelaars met een maatschappelij

Bedrijfsomschrijving Zoek jij als medior .Net ontwikkelaar een inspirerende werkplek bij een bedrijf met maatschappelijk verantwoordelijkheidsgevoel? Dan is deze vacature je op het lijf geschreven. De organisatie bestaat ruim 20 jaar en ze ontwikkelen in house applicaties waarmee de zorgsector enorm mee gebaat is. Jouw applicaties worden gebruikt door duizenden gebruikers waardoor je echt een waardevolle bijdrage kan leveren aan de maatschappij. Het bedrijf is zeer innovatief en vindt een goede werk/privé balans belangrijk. Je krijgt alle mogelijkheden om jezelf verder te ontwikkelen, je werktijden in te delen en daarnaast is het ook mogelijk om deels thuis te werken. Het

Bekijk vacature »
Arend a

Arend a

01/12/2008 20:49:00
Quote Anchor link
Ik heb een dilemma voor een tabel waarbij de volgorde uitmaakt, elke rij heeft een precieze plek in de tabel. Hoe kan je die rijen zo goed mogelijk onderhouden en bijwerken? (Herorderen van de tabel?). Je wil namelijk natuurlijk het liefst de kolom 'order' (integer), op unique zetten, en het liefst dat de order precies van 0 tot x loopt zonder gaten er tussen, maar dit maakt mutaties in een tabel een lastige zaak.

Ik heb het nu redelijk werkend met procedures.

language_get_next_ordinal(): de volgende ordinal in een table. (wellicht enigzins gevaarlijk bij hoge volume inserts, maar dit is niet aan de orde).

language_move(id, x): Verplaats record met id id naar positie x

language_reorder(): Haal gaps uit de tabel. (Bijvoorbeeld na een delete of na een update).

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
CREATE FUNCTION language_get_next_ordinal() RETURNS integer
    AS $$
 DECLARE
    p_next_ordinal integer;
 BEGIN
     SELECT count(id)
       INTO p_next_ordinal
     FROM vdven.language;
     RETURN p_next_ordinal;
 END;
$$
    LANGUAGE plpgsql;



CREATE FUNCTION language_move(f_id integer, f_new_pos integer) RETURNS integer
    AS $$
 DECLARE
     p_rec record;
     p_old_pos integer;
     p_max_pos integer;
     p_done integer := 0;
 BEGIN
     SELECT ordinal
     INTO p_old_pos
     FROM vdven.language
     WHERE id = f_id;
     
     SELECT COUNT(id)-1
     INTO p_max_pos
     FROM vdven.language;
     
     IF p_old_pos = f_new_pos THEN
        RETURN 0;
    END IF;

     IF p_max_pos < f_new_pos THEN
         RETURN -1;
     END IF;
    
     UPDATE vdven.language
     SET ordinal = p_max_pos+1
     WHERE id = f_id;
     
     IF p_old_pos > f_new_pos THEN
        FOR p_rec IN
                SELECT id,ordinal
                FROM vdven.language
                WHERE ordinal >= f_new_pos  
                AND ordinal < p_old_pos
                ORDER BY ordinal DESC
                LOOP
            UPDATE vdven.language
            SET ordinal = ordinal+1
            WHERE id = p_rec.id;
            p_done := p_done+1;
        END LOOP;
    ELSEIF p_old_pos < f_new_pos THEN
        FOR p_rec IN SELECT id,ordinal FROM vdven.language WHERE ordinal <= f_new_pos  AND ordinal > p_old_pos ORDER BY ordinal ASC LOOP
            UPDATE vdven.language
            SET ordinal = ordinal-1
            WHERE id = p_rec.id;
            p_done := p_done+1;
        END LOOP;
    ELSE
        RETURN -1;
    END IF;
    
    UPDATE vdven.language
        SET ordinal = f_new_pos
        WHERE id = f_id;
    RETURN p_done;
END;
$$
    LANGUAGE plpgsql;


CREATE FUNCTION language_reorder() RETURNS integer
    AS $$
 DECLARE
     p_rec record;
     p_int integer := 0;
     p_done integer :=  0;
 BEGIN
    FOR p_rec IN SELECT id,ordinal FROM vdven.language ORDER BY ordinal ASC LOOP
        IF p_int <> p_rec.ordinal THEN
            UPDATE vdven.language
            SET ordinal = p_int
            WHERE id = p_rec.id;
            p_done := p_done+1;
        END IF;
        p_int := p_int+1;
    END LOOP;
    RETURN p_done;
END;
$$
    LANGUAGE plpgsql;


Dit is een realtief complexe oplossing voor een simpel probleem, weet iemand in postgres of sql wellicht een simpelere oplossing?
Gewijzigd op 01/01/1970 01:00:00 door Arend a
 
PHP hulp

PHP hulp

29/04/2024 17:59:28
 
Frank -

Frank -

01/12/2008 21:10:00
Quote Anchor link
Quote:
Ik heb een dilemma voor een tabel waarbij de volgorde uitmaakt
De volgorde is het gevolg van een sortering die je opgeeft in een SELECT-query. Jouw dilema kun je dus schrappen, deze bestaat niet.
Quote:
Je wil namelijk natuurlijk het liefst de kolom 'order' (integer), op unique zetten
Dan doe je dat toch? Niets of niemand die je tegen houdt.
Quote:
en het liefst dat de order precies van 0 tot x loopt zonder gaten er tussen
Voor een sortering maakt het niet uit of je nu 1,2,3 of 1,8, 25 hebt, 1 is altijd de kleinste waarde en 2 is altijd kleiner dan 3, net zoals 8 kleiner dan 25 is. Voor een sortering bestaan er geen gaten.

Kortom, ik plaats hele grote vraagtekens bij bovenstaande "oplossingen", ik zie namelijk zelfs geen probleem. Leg eens uit wat nu het echte probleem is, dan kunnen we daar mee helpen.
 
PHP Newbie

PHP Newbie

01/12/2008 23:16:00
 
Arend a

Arend a

01/12/2008 23:31:00
Quote Anchor link
De sortering zelf is niet het probleem zoals ik aangaf, maar het hele herordenen is het probleem.

Ik post dit omdat ik zelf ook mijn twijfels heb bij dit systeem maar, mijn redenering is als volgt:

1. De waarde van order moet unique zijn, want de order van de tabel is bepaald en ondubbelzinnig.
2. Je zal ook bij een systeem met gaps problemen tegenkomen, want er zullen niet altijd gaps zijn, en dan moet je alsnog gaan hernummeren in de order. Mijn conclusie hieruit is dat een systeem met gaps geen voordeel bied tov een systeem zonder gaps.

Er zijn een paar algemene problemen met een ordered structuur:
1. Product X staat op positie 10, en moet naar 14, en de waarden 10 t/m 20 zijn bezet (ook met een systeem met gaps mogelijk). Dit houd in dat alles met waarde 11 t/m 14 wordt verplaatst naar 10 t/m 13, en product x komt op 14. Echter, product x moet eerst naar een tijdelijke waarde, want waarde 14 is op dat moment bezet, en dubbele waarden zijn niet mogelijk

2. Het verwisselen van twee items:
Bij een unique column levert dit ook hersenkrakers op, immers je kan niet in een transactie order 1 naar order 2 hernoemen en order 2 naar order 1, omdat je de twee niet tegelijkertijd kan uitvoeren en er dan een unique constrain in werking treed, kortom, je moet eerst eentje naar een tijdelijke waarde hernoemen en dan pas kan de andere terug.

Resumerend:
Een tabel die een unique order colum heeft levert nogal wat problemen op bij het aanpassen van de order, is het nog de moeite waard deze integriteit in de database te willen afdwingen of ziet iemand snellere of slimmere manieren om deze problemen te ondervangen?
Gewijzigd op 01/01/1970 01:00:00 door Arend a
 
Frank -

Frank -

02/12/2008 17:55:00
Quote Anchor link
1) nr. 10 moet naar nr. 14: Alles groter dan 13 schuift 1 op, +1 en nr 10 krijgt dan nr 14 als nieuw nummer. Dat nr. 10 leeg blijft, is geen enkel probleem, niemand die daar ooit last van zal hebben.

2) Het verwisselen van twee items wanneer je met een UNIQUE zit: Iets lastiger, maar met een work-around binnen een transactie geen enkel probleem:
1: start transaction;
2: record A geef je een oneindig grote waarde om zo ruimte te maken voor record B
3: record B krijgt de waarde van record A, die is tenslotte vrij gekomen
4: record A krijgt de waarde van record B, die is nu ook vrij.
5: commit

Stap 2 is de workaround, gebruik hier wel een random waarde voor. Dan is de kans wel heel erg klein dat er gelijktijdig iemand anders dezelfde waarde gebruikt.

Tip: Zet dit stuk in een stored procedure, dan kun je nooit de transactie vergeten. Zorg wel voor een goede rollback en test dit ook.

Edit: In het ergste geval zul een rollback moeten doen, wat in SQL de gewoonste zaak van de wereld is. Met een EXCEPTION in je stored procedure kun je dit eenvoudig afhandelen en een fraaie foutmelding richting de applicatie gooien.
Gewijzigd op 01/01/1970 01:00:00 door Frank -
 
Klaasjan Boven

Klaasjan Boven

02/12/2008 18:47:00
Quote Anchor link
Arend,

Je maakt me wel nieuwsgierig naar wat je aan het doen bent. Ik kan niks voorstellen bij een tabel waarin de volgorde zo exact bepaald moet zijn
 
PHP Newbie

PHP Newbie

02/12/2008 19:22:00
Quote Anchor link
Arend,

In dat voorbeeld leg ik niet alleen uit hoe je kan sorteren maar ook hoe ik daarbij de database update.

I.c.m. een transaction kan er niets mis gaan...
 
Arend a

Arend a

03/12/2008 02:17:00
Quote Anchor link
Bedankt voor de input, morgen een uitgebreidere reactie.

Over transacties, misschien doe ik iets verkeerd maar de volgende transactie werkt niet op een unique colom:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
BEGIN;
UPDATE public.test_unique
SET "unique"=2 WHERE id=1;
UPDATE public.test_unique
SET "unique"=1 WHERE id=2;
COMMIT;
 
Frank -

Frank -

03/12/2008 08:58:00
Quote Anchor link
Dat klopt helemaal, zie mijn reactie van 02.12.2008 17:55.

Je moet eerst record 1 een dummy-waarde geven, dan record 2 de gewenste waarde geven en vervolgens record 1 alsnog de juiste waarde geven.

Door dit in een transactie te doen, kun je nooit een corrupte database oplopen. Mits je de juiste beslissing neemt bij een COMMIT of ROLLBACK. Dit is dus een typisch voorbeeld van een set queries die je heel graag in een stored procedure zet. Dan hoef je de boel maar 1x te programmeren en kun je onmogelijk nog ergens in je PHP-code iets verkeerd doen.

Jouw probleem heeft niets met een transactie te maken, maar met een unique-constraint die wordt overtreden. Vandaar de dummy-waarde. Als dummy-waarde zou je bv. een sequence kunnen gebruiken die begint bij de waarde 1.000.000.000. Al heb je duizenden gebruikers per seconde, iedereen gebruikt zijn eigen dummy-waarde die door de sequence wordt uitgedeeld. De transactie is uitsluitend bedoelt om de boel veilig af te handelen. Je hebt toch wel ervaring met transacties?
 
Frank -

Frank -

03/12/2008 22:55:00
Quote Anchor link
Hier een voorbeeldje hoe je met een stored procedure 2 records van plaats kunt laten wisselen waarbij hun plekje in de sortering uniek moet zijn.

De tabel:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
CREATE TABLE test
(
  id serial NOT NULL,
  naam character varying(29),
  sort integer NOT NULL,
  CONSTRAINT pk_test PRIMARY KEY (id)
);

De UNIQUE constraint (met voorwaarde!!!):
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
CREATE UNIQUE INDEX u_sort
  ON test
  USING btree
  (sort)
  WHERE sort <> 0;

En dan de stored procedure:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
CREATE OR REPLACE FUNCTION switch(IN a INT, IN b INT) RETURNS bool AS
$BODY$
DECLARE
    new_a    INT;
    new_b    INT;
    ok        BOOL    := true;
BEGIN
    -- ophalen huidige sort-waarde van records a en b
    SELECT sort INTO new_b FROM test WHERE id = a;
    SELECT sort INTO new_a FROM test WHERE id = b;
    
    -- record a de sort-waarde 0 geven:
    BEGIN
        UPDATE test SET sort = 0 WHERE id = a;
        IF  NOT FOUND THEN
            RAISE EXCEPTION 'record met id % niet gevonden', a;
        END IF;
    
        -- record b de oude sort-waarde van a geven:
        UPDATE test SET sort = new_b WHERE id = b;
        IF  NOT FOUND THEN
            RAISE EXCEPTION 'record met id % niet gevonden', b;
        END IF;

        -- record a de oude sort-waarde van b geven:
        UPDATE test SET sort = new_a WHERE id = a;
        IF  NOT FOUND THEN
            RAISE EXCEPTION 'record met id % niet gevonden', a;
        END IF;

        EXCEPTION
            WHEN unique_violation THEN
                ok := false;
            WHEN not_null_violation THEN
                ok := false;
    END;

    RETURN ok;
END;
$BODY$
language plpgsql;

En de query om hem aan te roepen:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
SELECT switch(3,1);


Een heel verhaal, maar nu kun je records in de sortering van plaats laten wisselen. Mocht er wat fout gaan, krijg je een dikke error of een false retour, afhankelijk van wat er fout gaat. Dit mag je verder zelf uitwerken, je wilt uiteraard maar 1 soort foutmelding retour krijgen. Nu heb je alle mogelijkheden, dat laat zien wat er mogelijk is.

De index is een beetje bijzonder, voor de waarde 0 geldt geen UNIQUE, deze kun je dus gebruiken voor de noodzakelijke workaround. In voorgaande reacties zei ik nog dat je een hele hoge waarde kunt nemen, maar 0 is eigenlijk veel handiger. Dus even een UNIQUE met een uitzondering. Dat kan in PostgreSQL, dus maak je er ook gebruik van ;)

De transactie gaat nu ook goed, een sp werkt altijd transactioneel. En doordat de query bij een mislukking keihard op zijn muil gaat, wordt er door de sp een rollback uitgevoerd. Werkt dus uitstekend.

Wat kan SQL toch mooi zijn.
 
Arend a

Arend a

08/12/2008 01:14:00
Quote Anchor link
Hoi Frank,

Bedankt voor je uigebreide antwoord!

Ik heb het nog niet getest, inderdaad slim om de waarde 0 als tijdelijke waarde te reserveren. De reden om de tabel opeenvolgend te houden is omdat het dan voorspelbaar is in programmatuur dat nummer 4 degene is na nummer 3 en positie 5 degene 6 posities na nummer 4. Dit is met name handig als je niet wil wisselen, maar wil verplaatsen, (zie de move procedure die ik eerder geschreven heb.)

Nog even een andere vraag: is het mogelijk een procedure te herschrijven zodat het simpel op meerdere tabellen te gebruiken is? (ik heb nu steeds te tabel hardcoded in de procedure, maar het zou makkelijker zijn als het op meerdere tabellen toe te passen is zonder te gehele procedure te hoeven herschrijven.)
 
Frank -

Frank -

08/12/2008 13:06:00
Quote Anchor link
Ja hoor, kan prima, je moet alleen zorgen voor wat extra foutafhandeling in de sp omdat er meer fout kan gaan. Uurtje werk en je kunt er jaren plezier aan beleven.
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.