Selezione con limiti in PL/SQL

Premetto che alla maggior parte di voi questo post non interesserà affatto. Ma siccome c'è un piccolo gruppo di informatici tra gli utenti assidui di questo sito, vale la pena di scrivere qualcosa che serva anche a loro.

Attualmente stò lavorando con PL/SQL alla realizzazione del Safety Management System del CERN. Mi sono imbattuto nel problema di dover ricavare da una base di dati Oracle un certo range di record. Nelle mie precedenti esperienze lavorative avevo utilizzato sempre l'opzione LIMIT direttamente nel costrutto SELECT, pensando che fosse standard SQL.

E invece non lo è. E tale opzione non è prevista nello standard SQL attuale.

E pensare che ho perso circa 3 ore a pensare perché il mio codice non funzionava (fortuna che posso testare il codice prima di metterlo sui server di produzione!). La soluzione con Oracle consiste nell'utilizzare ROWNUM: ad esempio per selezionare i record che hanno numero di ordine compreso tra 10 e 50 si userà

 
SELECT *
FROM employees
WHERE ROWNUM BETWEEN 10 AND 50
ORDER BY cern_id;
 

Importante in questi casi è utilizzare il costrutto ORDER BY! Se non lo specificate Oracle vi restituirà semplicemente 50-10=40 records!

Social bookmarking system:
  • Digg
  • del.icio.us
  • Technorati
  • Furl
  • BlinkList
  • blogmarks
  • YahooMyWeb
  • blinkbits
  • Blue Dot
  • De.lirio.us
  • MisterWong
  • MyShare
  • Netscape
  • Simpy
  • Slashdot
  • SphereIt
  • Spurl
  • StumbleUpon
  • description
  • Fleck
  • Netvouz
  • Shadows

1 comment so far

  1. TONGA March 21, 2007 11:30 am

    ho smarrito il mio pappagallo……cercasi pappagallo verde….si offre ricompensa….

Leave a comment

Please be polite and on topic. Your e-mail will never be published.

You must be logged in to post a comment.