Avatar billede lauritspetersen Nybegynder
27. september 2001 - 20:52 Der er 1 kommentar og
1 løsning

PLSQL

Hej...
Jeg er ved at lave et bookingsystem og skal booke på følgende måde via en procedure i plsql :

Proceduren modtager en startdato.
Hvis denne dato ikke allerede findes skal den oprettes. Findes den skal den første ledige blok ( 8 blokke ) findes. Er der ingen ledige blokke springes videre til næste dag.

Problemet er at jeg skal finde felter der ikke allerede eksisterer i tablet.
Det er lykkedes mig at lave en procedure der kører rekursivt på tabellerne og finder en række når der bliver kastet en exception. Dette er dog ikke særligt effektivt specielt ikke ved stor datamængder.

Er der nogen der har et forslag til et select statement som kunne udføre dette ? Altså uden at køre på exceptions. Jeg har fået at vide at kommandoen exists skulle kunne bruges i denne sammenhæng, men har ikke lige nogen indfaldsvinkel på nuværende tidspunkt.

Med venlig hilsen og på forhånd tak

Laurits Petersen
Avatar billede sjoller Nybegynder
27. september 2001 - 21:07 #1
Ja, du kan bruge exists...
Avatar billede zeeo Nybegynder
01. oktober 2001 - 19:25 #2
Dette gælder kun hvis du bruger oracle 8.1.5 (8i)eller derover

create or replace function findblok (
  p_start_dato in out date
) return number is
  cursor c is select blok from
    (select nvl(max(blok+1),1) from tablenavn
    where start_dato = p_start_dato
    and  blok < 8
    order by blok desc
    ) where rownum<2;
  v_blok number;
begin
  open c
  fetch c into v_blok;
  if sql%notfound then
    insert into tabelnavn (dato,blok)
    p_start_date:=p_start_date+1;
    values (p_start_date,null);
    v_blok:=findblok(p_start_dato);
  end if;
  return(v_blok);
end;
/
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Computerworld tilbyder specialiserede kurser i database-management

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester