Oracle笔记整理(4)

2019-04-08 21:42

if v_age >= 50 then

dbms_output.put_line('老年!'); elsif v_age>=30 then

dbms_output.put_line('状年!'); elsif v_age>=18 then

dbms_output.put_line('青年!'); else

dbms_output.put_line('未成年!'); end if; end;

--case子句:类似于switch DECLARE

grade varchar2(2); BEGIN

grade:='&grade'; CASE grade

WHEN 'A' THEN DBMS_OUTPUT.PUT_LINE('优异'); WHEN 'B' THEN DBMS_OUTPUT.PUT_LINE ('优秀'); WHEN 'C' THEN DBMS_OUTPUT.PUT_LINE ('良好'); WHEN 'D' THEN DBMS_OUTPUT.PUT_LINE ('一般'); WHEN 'F' THEN DBMS_OUTPUT.PUT_LINE ('较差'); ELSE DBMS_OUTPUT.PUT_LINE ('没有此成绩'); END CASE; END;

--loop循环结构: do...while循环 --loop --循环体; -- exit when 条件 --end loop; declare

i binary_integer:=1; begin

loop

dbms_output.put_line('i='||i); i:=i+1;

exit when i>10; --满足条件推出循环 end loop; end;

--while循环结构:类似于while循环 --while 条件 --loop --循环体 --end loop;

declare

i binary_integer:=1; begin

while(i<=10) loop

dbms_output.put_line('i='||i); i:=i+1; end loop; end;

9.PL-SQL基础2

--动态SQL /*

动态 SQL 是指在PL/SQL程序执行时生成的 SQL 语句

编译程序对动态 SQL 不做处理,而是在程序运行时动态构造语句、对语句进行语法分析并执行

DDL 语句命令和会话控制语句不能在 PL/SQL 中直接使用,但是可以通过动态 SQL 来执行 执行动态 SQL 的语法:

EXECUTE IMMEDIATE dynamic_sql_string [INTO define_variable_list] [USING bind_argument_list]; */

--根据用户输入的员工编号,动态将该员工的编号和薪水插入到bound2表(动态创建)中 declare

v_emp_id number; v_sql varchar2(200); v_emp_rec emp%rowtype; begin

v_emp_id:='&empno';

--查询指定编号的员工信息

v_sql:='select * from emp where empno=:id';

execute immediate v_sql into v_emp_rec using v_emp_id;--将查询出的记录存放到v_emp_rec变量中

--动态创建bound2表

v_sql:='create table bound3(id number,sal number)'; execute immediate v_sql;--创建表

v_sql:='insert into bound3 values(:1,:2)';

execute immediate v_sql using v_emp_rec.empno,v_emp_rec.sal; end;

select * from bound3; --异常处理 declare

v_num1 number:=2;

v_num2 number:=0; v_result number; begin

v_result:= v_num1/v_num2; dbms_output.put_line(v_result);

exception when others then--Exception dbms_output.put_line('出错了.....'); end; declare

v_emp_id number; v_sal number; begin

select empno,sal into v_emp_id,v_sal from emp; dbms_output.put_line('v_emp_id='||v_emp_id); dbms_output.put_line('v_sal='||v_sal); exception when too_many_rows then dbms_output.put_line('error...'); end;

--自定义异常

declare

tel number(8);

invildNumber exception; begin

tel:='&tel';

if tel not in(12345678,87654321) then raise invildNumber; else

dbms_output.put_line(tel); end if;

exception when invildNumber then

--dbms_output.put_line('error...');

raise_application_error(-20001,'error....'); end;

10.游标

/*

游标:类似于jdbc中的ResultSet

逐行处理查询结果,以编程的方式访问数据 游标的类型:隐式游标,显示游标,Ref游标 隐式游标:

在PL/SQL中使用DML语句时自动创建隐式游标

隐式游标自动声明、打开和关闭,其名为 SQL

通过检查隐式游标的属性可以获得最近执行的DML 语句的信息 隐式游标的属性有:

%FOUND – SQL 语句影响了一行或多行时为 TRUE %NOTFOUND – SQL 语句没有影响任何行时为TRUE %ROWCOUNT – SQL 语句影响的行数 %ISOPEN - 游标是否打开,始终为FALSE */

declare

v_emp_id number; begin

v_emp_id:='&请输入编号';

update emp set sal=sal+10 where empno=v_emp_id; if SQL%FOUND then

dbms_output.put_line('受影响的行数'||SQL%ROWCOUNT); end if; end;

select * from emp; /*

显示游标

显式游标在 PL/SQL 块的声明部分定义查询,该查询可以返回多行 */

--使用loop循环遍历游标 declare

v_emp_rec emp%ROWTYPE;--用于保存一行数据 cursor my_cursor is select * from emp;--声明游标 begin

open my_cursor;--打开游标 loop

fetch my_cursor into v_emp_rec;--提取行 exit when my_cursor%NOTFOUND ;

dbms_output.put_line('姓名:'||v_emp_rec.ename); end loop;

close my_cursor;-- 关闭游标 end;

--使用while循环遍历游标

declare

v_emp_rec emp%ROWTYPE;--用于保存一行数据 cursor my_cursor is select * from emp;--声明游标 begin

open my_cursor;--打开游标 fetch my_cursor into v_emp_rec; while (my_cursor%FOUND)

loop

dbms_output.put_line('姓名:'||v_emp_rec.ename); fetch my_cursor into v_emp_rec;--提取行 --exit when my_cursor%NOTFOUND ; end loop;

close my_cursor;-- 关闭游标 end;

--使用for循环,不需要打开和关闭游标 declare

v_emp_rec emp%ROWTYPE;--用于保存一行数据 cursor my_cursor is select * from emp;--声明游标 begin

for v_emp_rec in my_cursor loop

dbms_output.put_line('姓名:'||v_emp_rec.ename); end loop; end;

11.游标2

--带参数的游标 declare

v_sal emp.sal%type;

v_emp_rec emp%rowtype;

cursor cur(salpara number) is select * from emp where sal < salpara; --声明带参数的游标 begin

v_sal:='&sal';

for v_emp_rec in cur(v_sal)

loop

dbms_output.put_line(v_emp_rec.ename||'--'||v_emp_rec.sal); end loop; end;

select * from emp where sal<1500

--使用游标更新(薪水<1500员工,加薪100) declare

v_sal number;

cursor cur is select sal from emp where sal < 1500 for update; begin

open cur; loop

fetch cur into v_sal;

exit when cur%NOTFOUND ;

dbms_output.put_line('sal:'||v_sal);

update emp set sal=v_sal+100 where current of cur;--使用当前的游标作为条件


Oracle笔记整理(4).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:金榜题名宴会致辞

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: