oracle 之 循环、游标

来源:互联网 发布:上证指数数据 编辑:程序博客网 时间:2024/04/29 13:02

1.IF-ELSE 结构

set serverout ondeclare    v_empno emp.empno%type:=&p_empno;    v_sal emp.sal%type;begin    select sal into v_sal from emp where empno= v_emono;    if v_sal<1500 then        dbms_output.put_line('工资等级为一级');    elseif v_sal<3000 then        dbms_output.put_line('工资等级为一级');    else        dbms_output.put_line('工资等级为一级');    end if;end;/

2.LOOP简单循环(打印1-10)

set serverout ondeclare    --定义循环初始值     i number(10):=0;begin    loop    --改变增量    i:=i+1;    dbms_output.put_line(i);    --循环退出条件    exit when i = 10;    end loop;end;/

3.LOOP 打印偶数值

declare    i number(10):=0;begin    loop        if mod(i,2)=0 then        dbms_output.put_line(i);        end if;        i:i+1;        exit when i = 10;    end loop;end;/

4.while循环打印1-10

set serverout ondeclare    i number(10):=0;begin    --定义 while 循环    while i<=10 loop        --循环操作        dbms_output.put_line(i);        --改变循环条件        i:=i+1;    end loop;end;/### 5.FOR 循环set serverout onbegin    for i in 1..10 loop        dbms_output.put_line(i);    end loop;end;/

6.批量添加数据

-- 生成随机字符 dbms_random.string(选项,长度);-- 选项:u 表示大写字母,L表示小写字母,x表示数字和字母混合,p 任意字符-- 随机生成数字:语法1:dbms_random.value (0,1);-- dbms_random.value*num; 0到 num 的随机数-- dbms_random.value(min,max); 生成 min 到 max 随机数-- 随机数取整:round(dbms_random.value(min,max); 四舍五入             trunc(dbms_random.value(min,max); 将数字的小数部分截去

7.创建测试表

create table student(    sid number(20) not null primary key,    sname varchar2(20) not null,    password varchar2(20) not null,    sex varchar2(20) not null,    phone varchar2(20));set serverout onbegin    for i in 1..20 loop        insert into student(sid,sname,password,sex,phone)        values(            1,            dbms_random.string('u',6),            dbms_random.string('x',10),            trunc(dbms_random.value(13000000000,18900000000))            );        commit;    end loop;end;/

8.游标

set serverout ondeclare    v_deptno dept.deptno%type:=&p_deptno;begin    delete from emp where deptno=v_deptno;        -- SQL%rowcount 记录删除的行数;如果 rowcount>0,表示已经删除员工。    if SQL%rowcount>0 then        -- 再删除部门        delete from dept where deptno=v_deptno;        dbms_output.put_line('部门编号为:'||v_deptno||'的部门信息已经删除!');    else         -- 员工数目为空        dbms_output.put_line('部门编号为:'||v_deptno||'的员工信息已经删除!');    end if;end;/

9.显示游标,查询员工中前10条数据,分别提取 ename,sal

set serverout ondeclare    -- 1.定义游标    cursor cursor_emp    is    select ename,sal from emp where rownum<=10;    -- 定义两个变量,分别来接受游标提取两列的值    v_ename emp.ename%type;    v_sal emp.sal%type;begin    -- 2.打开游标    open cursor_emp;    -- 3.提取游标内的第一行数据中的两类数据分别赋予两个变量    fetch cursor_emp into v_ename,v_sal;    -- 4.循环打印提取游标内容,发现下一行就循环,类似 jdbc    while cursor_emp%fount loop        dbms_output.put_line(v_ename||'---'||v_sal);        -- 改变循环条件,查看是否有下一条数据        fetch cursor_emp into v_ename,v_sal;    end loop;    -- 5.关闭游标    close cursor_emp;end;/

10.使用游标变量来提取部门编号为20的所有员工信息

set serverout ondeclare     -- 1.定义弱类型游标        TYPE emp_cursor_type IS REF CURSOR;( 强类型 REF_CURSOR 返回的数据类型和长度在编译期就应该指明,而弱类型 REF_CURSOR 不需要。)    -- 2.定义游标类型    v_cursor_emp EMP_CURSOR_TYPE;    -- 3.定义游标类型变量的行记录,指的是,游标提取的一条数据中        的列数和列名和数据库类一致          v_emp_record emp%ROWTYPE;begin    -- 4.打开游标        open v_cursor_emp for sleect * from emp where deptno=20;    -- 5.循环提取游标内容    loop        -- 5.1 提取游标内容到行记录        fetch v_cursor_emp into v_emp_record;        -- 5.2 打印提取的数据        dbms_output.put_line('ename:'||v_emp_record);        -- 5.3 定义循环退出条件        exit when v_cursor_emp%notfound;    end loop;    -- 6.关闭游标    close v_cursor_emp;end;/

11. 使用 for 循环提取游标内容

set severout ondeclare    -- 1.定义游标    cursor cursor_emp    is    select ename,sal from emp where rownum<=10;begin    -- 自动打开,提取,关闭        for i in cursor_emp loop          dbms_output.put_line(i.ename||'---'||i.sal);        end loop;end;/
原创粉丝点击