想问一下ORACLE能像JAVA程序那样写FOR循环么?
比如我Java这样public static void ss() {
int a = 10;
int b = 20;
for (; b - a > 1; a++) {
System.out.println(1);
}
} 请问在ORACLE函数里如何实现上面的功能?谢谢。
比如我Java这样public static void ss() {
int a = 10;
int b = 20;
for (; b - a > 1; a++) {
System.out.println(1);
}
} 请问在ORACLE函数里如何实现上面的功能?谢谢。
is
a number := 10;
b number := 20;
begin
while (b - a > 1) loop
dbms_output.put_line(1);
a := a + 1;
end loop;
end;-- 执行
execute ss;-- 输出结果
1
1
1
1
1
1
1
1
1
dbms_output.put_line('打印倒三角形');
for i in 1..9 loop
for j in reverse i..9 loop --reverse对值进行从大到小的循环
dbms_output.put('*');
end loop for_j;
dbms_output.new_line;--用于在缓冲区中添加换行符
end loop for_i;
end;
create or replace procedure ss
is
a number := 10;
b number := 20;
begin
for i in a..b loop -- for循环, i从a到b,包括a和b
dbms_output.put_line(i);
end loop;
end;execute ss;-- output
10
11
12
13
14
15
16
17
18
19
20
DECLARE
v_fromDAte VARCHAR2(10);
v_toDate VARCHAR2(10);BEGIN
v_fromDAte := '2009-04-30';
v_toDate := '2009-05-07';
WHILE v_fromDate <= v_toDate LOOP
INSERT INTO holidays(cdate) values(v_fromDate);
v_fromDate := to_char(to_date(v_fromDate,'YYYY-MM-DD')+1,'YYYY-MM-DD');
END LOOP;
commit;
END;
/
set serveroutput on;
DECLARE
v_fromDAte VARCHAR2(10);
v_toDate VARCHAR2(10); v_startNum NUMBER(18,0);
v_allNum NUMBER(18,0);
v_timesNum NUMBER(18,0);
v_rate1 NUMBER(18,8); V_rate_inc NUMBER(18,8);BEGIN
delete from china_prod_tb1;
v_fromDAte := '2007-05-18';
v_toDate := '2010-06-30';
v_rate_inc := 0.00007;
v_startNum := 80;
v_timesNum := 80;
v_allNum := 0;
WHILE v_fromDate <= v_toDate LOOP
v_startNum := v_startNum + 9;
IF ( to_char(to_date(v_fromDAte,'YYYY-MM-DD'), 'D')='1' OR to_char(to_date(v_fromDAte,'YYYY-MM-DD'), 'D')='7' ) THEN
SELECT dbms_random.value(0.93,1.135) INTO v_rate1 FROM dual;
ELSE
SELECT dbms_random.value(0.88,1.128) INTO v_rate1 FROM dual;
END IF; v_timesNum := v_startNum * (v_rate1 + v_rate_inc);
IF v_timesNum < 80 THEN
SELECT dbms_random.value(70,120) INTO v_timesNum FROM DUAL;
END IF;
v_allNum := v_allNum + v_timesNum;
v_rate_inc := v_rate_inc + 0.000040;
v_fromDate := to_char(to_date(v_fromDate,'YYYY-MM-DD')+1,'YYYY-MM-DD');
INSERT INTO china_prod_tb1(cdate,proc_num) values(v_fromDate,v_timesNum);
-- dbms_output.put_line(to_char(v_timesNum));
END LOOP;
dbms_output.put_line(to_char(v_allNum));
commit;
END;
/
set serveroutput on;
DECLARE
v_cdate VARCHAR2(10);
v_proc_num NUMBER(18,0);
v_radom_rate NUMBER(18,6);
v_charge_user NUMBER(18,0); cursor c_ur is select t1.cdate, t1.proc_num from china_prod_tb1 t1;
BEGIN for r_ur in c_ur loop
v_cdate := r_ur.cdate;
v_proc_num := r_ur.proc_num; if( substr(v_cdate,6,2)='03' or substr(v_cdate,6,2)='04' ) then
select dbms_random.value(0.45,0.65) into v_radom_rate from dual;
else
select dbms_random.value(0.55,0.80) into v_radom_rate from dual;
end if; v_charge_user := v_proc_num * v_radom_rate; update china_prod_tb1 set charge_user =v_charge_user
where cdate=v_cdate;
END LOOP;
commit;
END;
/
/*
public static void ss() {
int a = 10;
int b = 20;
for (; b - a > 1; a++) {
System.out.println(1);
}
}
*/--FOR
DECLARE
a number := 10;
b number := 20;
count number := 0;
BEGIN
FOR count IN a..b LOOP
DBMS_OUTPUT.PUT_LINE(1);
END LOOP;
END; --WHILE
DECLARE
a number := 10;
b number := 20;
count number := 0;
BEGIN
WHILE a<b LOOP
DBMS_OUTPUT.PUT_LINE(1);
a := a+1;
END LOOP;
END; --LOOP
DECLARE
a number := 10;
b number := 20;
count number := 0;
BEGIN
LOOP
IF a<b THEN
DBMS_OUTPUT.PUT_LINE(1);
a := a+1;
END IF;
END LOOP;
END;