/ Forside / Teknologi / Udvikling / SQL / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
SQL
#NavnPoint
pmbruun 1704
niller 962
fehaar 730
Interkril.. 701
ellebye 510
pawel 510
rpje 405
pete 350
gibson 320
10  smorch 260
stored procedure - hjælp søges
Fra : Trine Banke Brennech~


Dato : 12-02-03 14:38

Hej gruppe
Jeg har et problem, som måske er for nybegyndere med stored
procedures/triggers - men sådan en er jeg altså (nybegynder)... Jeg kan ikke
komme videre med, at man først selecter noget, der giver flere resultater,
og disse resultater skal så bruges i en ny select. Hvis det var i PHP, ville
jeg lave en for-løkke eller while-løkke, men i en stored procedure/trigger
har jeg ingen idé. Jeg håber, at nogen har lyst til at hjælpe?

Jeg har 3 tabeller:

create table sang(
sangid int not null primary key,
titel varchar(50) not null
);

create table deltager(
deltagerid int not null primary key,
navn varchar(30) not null
);

create table forhold(
deltagerid int not null,
sangid int not null,
foreign key (deltagerid) references deltager(deltagerid),
foreign key (sangid) references sang(sangid),
primary key (deltagerid,sangid)
);

Jeg vil gerne lave en stored procedure, der som input har et specifikt
sangid.
Ud fra sangid'et findes deltagerid på alle de personer, der deltager i
sangen i forholds-tabellen.
Så slettes alle forekomster af sangid'et i forholdstabellen.
Herefter tjeckes, om der stadig er forekomster i forholdstabellen, hvor de
før fundne deltagerid indgår i. Hvis der IKKE er, slettes deltageren fra
deltager-tabellen.

Jeg skylder måske lige at sige, at jeg bruger firebird-databasen, men skal
senere lave det samme i postgresql, så en løsning til een af disse databaser
vil være fint (hvis de ikke kan bruge den samme løsning)

På forhånd 1000 tak.

Med venlig hilsen
Trine Banke Brenneche



 
 
Peter Lykkegaard (12-02-2003)
Kommentar
Fra : Peter Lykkegaard


Dato : 12-02-03 15:47

Som svar på skriblerier nedfældet af Trine Banke Brenneche :

> Ud fra sangid'et findes deltagerid på alle de personer, der deltager i
> sangen i forholds-tabellen.
> Så slettes alle forekomster af sangid'et i forholdstabellen.

Du kan flytte data over i en temp table før sletning

-- Opret ny temp table
SELECT * FROM Forhold INTO #tmpForhold WHERE 1=2

-- Overfør data
INSERT INTO #tmpForhold
SELECT * FROM Forhold INTO #tmpForhold WHERE DeltagerID IN (
SELECT F.DeltagerID From Forhold F WHERE F.SangID = 10
)
-- Slet data
DELETE * FROM Forhold WHERE WHERE DeltagerID IN (
SELECT F.DeltagerID From Forhold F WHERE F.SangID = 10
)

> Herefter tjeckes, om der stadig er forekomster i forholdstabellen,
> hvor de før fundne deltagerid indgår i.

-- Hvis ingen forekomster
IF NOT EXISTS (
SELECT F.DeltagerID From Forhold F WHERE F.DeltagerID IN (
SELECT F.DeltagerID FROM #tmpForhold
)
)

> Hvis der IKKE er, slettes deltageren fra deltager-tabellen.

-- Slet data
DELETE FROM Deltager WHERE DeltagerID IN (
SELECT F.DeltagerID FROM #tmpForhold
)

-- housekeeping
DROP TABLE #tmpForhold

Det er MSSQL/T-SQL syntaks
Du kan evt bruge det som inpiration

Med forbehold for typos og dårlig hukommelse

mvh/Peter Lykkegaard



Søg
Reklame
Statistik
Spørgsmål : 177517
Tips : 31968
Nyheder : 719565
Indlæg : 6408629
Brugere : 218887

Månedens bedste
Årets bedste
Sidste års bedste