2013-02-21 18 views
11

Jestem nowy w firmie Oracle i nie jestem świadomy używania pętli w Oracle SQL (nie PL/SQL).Dla pętli w Oracle SQL

Musiałem wymagać zwiększenia liczby o +1 w zapytaniu i wykonania instrukcji; czy można użyć pętli for w SQL?

+0

Nie ma "pętli for" w operacjach na zestawach. Po prostu zapytaj "prawdziwe pytanie" - upewnij się, że pokazujesz wejście/wyjście/bieżącą próbę - i upewnij się, że tytuł odzwierciedla to. Usuń znacznik 'plsql', jeśli rzeczywiście * nie jest to PL/SQL * zgodnie z opisem. –

+0

Jak powiedział pst, nie ma "pętli", ale są sposoby na osiągnięcie tego samego efektu. Co rozumiesz przez * wykonanie instrukcji * i która liczba powinna zostać zwiększona o 1 i ile razy? –

+0

@ A.B.Cade Chcę utworzyć niestandardową zmienną powiedz "i" i chcę ją zwiększyć, aż osiągnie "5" Chcę użyć tej zmiennej do dołączenia do jakiegoś ciągu. czy jest to możliwe w sql – user964147

Odpowiedz

25

Jesteś bardzo zdezorientowany, mój przyjacielu. W języku SQL nie ma LOOPS, tylko w PL/SQL. Oto kilka przykładów, w oparciu o istniejące Oracle stole - kopiuj/wklej aby zobaczyć wyniki:

-- Numeric FOR loop -- 
set serveroutput on -->> do not use in TOAD -- 
DECLARE 
    k NUMBER:= 0; 
BEGIN 
    FOR i IN 1..10 LOOP 
    k:= k+1; 
    dbms_output.put_line(i||' '||k); 
END LOOP; 
END; 
/

-- Cursor FOR loop -- 
set serveroutput on 
DECLARE 
    CURSOR c1 IS SELECT * FROM scott.emp; 
    i NUMBER:= 0; 
BEGIN 
    FOR e_rec IN c1 LOOP 
    i:= i+1; 
    dbms_output.put_line(i||chr(9)||e_rec.empno||chr(9)||e_rec.ename); 
    END LOOP; 
END; 
/

-- SQL example to generate 10 rows -- 
SELECT 1 + LEVEL-1 idx 
    FROM dual 
CONNECT BY LEVEL <= 10 
/
3

Na pewno będziesz w stanie to zrobić za pomocą klauzuli WITH lub użyj funkcji analitycznych dostępne w Oracle SQL.

Przy odrobinie wysiłku można uzyskać z nich wszystko w zakresie cykli, jak w zwykłych językach proceduralnych. Oba podejścia są dość potężne w porównaniu ze zwykłym SQL.

http://www.dba-oracle.com/t_with_clause.htm

http://www.orafaq.com/node/55

To wymaga trochę wysiłku, choć. Nie bój się podać konkretnego przykładu.

Używanie prostego pseudo-stołu DUAL pomaga również.

+0

Mam edytowane moje pytanie proszę spojrzeć na przykład – user964147

+1

Niestety, nie widzę go. "mądrzy" faceci zbyt szybko zamknęli to pytanie, ponieważ go nie rozumieli. – MarianP

+0

Czy możesz dodać kolejne pytanie? Określić go jako "jak to zrobić za pomocą funkcji analitycznych Oracle SQL"? w ten sposób nie będą go zamykać. – MarianP