Avatar billede havmaage Juniormester
01. maj 2014 - 11:02 Der er 4 kommentarer og
1 løsning

PLSQL LOOP

Hejsa!

Er det muligt at udføre et simplet sql statemenet i et loop med et wait statement f.eks 2 min og få outputtet ud som normalt i sql developer
jeg forsøger følgende
DECLARE i number(2);
BEGIN
  FOR I IN 1 ..20 LOOP

    select * from _properties where value = 'EXCLUSIVE';
  --her ville jeg gerne have et sleep statement

END LOOP;
END;
/

men den brokker sig med følgende :

ORA-06550: linje 4, kolonne 5:
PLS-00428: an INTO clause is expected in this SELECT statement
06550. 00000 -  "line %s, column %s:\n%s"
*Cause:    Usually a PL/SQL compilation error.
*Action:

Jeg kunne sagtens sætte det op i et shell script med sqlplus... men nu er det lige dette her jeg sidder og prøver at blive klogere på :-)
Avatar billede Slettet bruger
01. maj 2014 - 16:02 #1
Du kan bruge DBMS_LOCK.SLEEP(seconds);
Avatar billede Slettet bruger
01. maj 2014 - 16:04 #2
Fejlen får du, fordi din SELECT statement ikke har noget sted at aflevere data.
Prøv med SELECT værdi into variabel FROM...
Avatar billede havmaage Juniormester
02. maj 2014 - 11:26 #3
Hej sa jeg kan ikke rigtig for sleep til ast virke som jeg gerne ville.
Den venter godt nok, men der kommer ikke output hvert 5 sec som var min intension:
Der går de der 20 * 2 sec. og så kommer alt output ud.

min kode 
DECLARE i NUMBER(2);
BEGIN
  FOR i IN 1..20 loop
    FOR dept_rec IN ( select * from i2db_properties where value = 'EXCLUSIVE') LOOP
      dbms_output.put_line( 'resultat: ' || dept_rec.key || ' ' || i );
      SYS.DBMS_LOCK.SLEEP(5);
    END LOOP;
   
  end loop;
END;
/
Avatar billede havmaage Juniormester
02. maj 2014 - 11:26 #4
Dette skulle have været en kommentar til tidligere svar sorry
Avatar billede Slettet bruger
02. maj 2014 - 11:34 #5
Et PL/SQL program afleverer først output, når det er afsluttet i sin helhed.

DBMS_OUPUT.PUT_LINE gemmer data i en buffer. Når programmet slutter, henter sql-plus data fra bufferen og skriver det ud.

Hvis du skal have output løbende, må du altså lave et script, som kan kalde sig selv. Eller du må pipe data over i en anden session med DBMS_PIPE. Eller du kan skrive til en tabel og læse disse data fra en session.
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

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