oracle pl(学习笔记-网).docx
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_05.gif)
《oracle pl(学习笔记-网).docx》由会员分享,可在线阅读,更多相关《oracle pl(学习笔记-网).docx(95页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、oracle pl/sql 基础PL/SQL笔记PL/SQL块中只能直接嵌入SELECT,DML(INSERT,UPDATE,DELETE)以及事务控制语句(COMMIT,ROLLBACK,SAVEPOINT),而不能直接嵌入DDL语句(CREATE,ALTER,DROP)和DCL语句(GRANT,REVOKE) 1.检索单行数据 1.1使用标量变量接受数据 v_ename emp.ename%type; v_sal emp.sal%type; select ename,sal into v_ename,v_sal from emp where empno=&no;-从键盘取值 1.2使用记录
2、变量接受数据 type emp_record_type is record( v_ename emp.ename%type,v_sal emp.sal%type); -定义一个类型,名字为emp_record_type ,该类型包括两个数据,v_ename和v_sal;这一个类型可以存放两个数据, emp_record emp_record_type;-定义一个变量,类型是新定义的记录类型的变量, begin select ename,sal into emp_record from emp where empno=&no;-取2个变量赋值到新的记录类型中。 Dbms_output.put_l
3、ine(emp_record.v_name); 1.3嵌入SELECT语句注意事项: 使用SELECT INTO语句时,必须要返回一条数据,并且只能返回一条数据 no_date_found: select into没有返回数据 too_many_rows: select into返回多条数据 where子句使用注意事项: 使用的变量名不能与列名相同,否则触发TOO_MANY_ROWS例外. 2.操纵数据 2.1使用VALUES子句插入数据 v_deptno dept.deptno%type; v_dname dept.dname%type; v_deptno:=no; v_dname:=&na
4、me; insert into dept (deptno,dname) values(v_deptno,v_dname); 2.2使用子查询插入数据 v_deptno emp.deptno%type:=&no; insert into employee select * from emp where deptno=v_deptno; 2.3更新数据 使用表达式更新列值 v_deptno dept.deptno%type:=no; v_loc dept.loc%type:=&loc; update dept set loc=v_loc where deptno=v_deptno; 2.4使用子查
5、询更新列值 v_ename emp.ename%type:=&name; update emp set (sal,comm) = (select sal,comm from emp where ename=v_ename) where job = (select job from emp where ename=v_ename) 2.5删除数据 使用变量删除数据 v_deptno dept.deptno%type:=&no; delete from dept where deptno=v_deptno; 2.6使用子查询删除数据 v_ename emp.ename%type:=&name; d
6、elete from emp where deptno=(select deptno from emp where ename=v_ename); 3.SQL游标 游标是指向上下文区的指针,包括隐含游标(SQL游标)和显式游标两种类型 SQL游标用于处理SELECT INTO ,INSERT,UPDATE以及DELETE语句. 显式游标用于处理多行的SELECT语句 SQL游标包括:SQL%FOUND,SQL%NOTFOUND,SQL%ROWCOUNT,SQL%ISOPEN等四种属性 3.1 SQL%ISOPEN:执行时,会隐含的打开和关闭游标.因此该属性的值永远都是FALSE 3.2 SQL
7、%FOUND:用于确定SQL语句执行是否成功.当SQL有作用行时,为TRUE,否则为FALSE v_deptno emp.deptno%type:=&no; update emp set sal=sal*1.1 where deptno=v_deptno; if sql%found then dbms_output.put_line(执行成功); else dbms_output.putline(失败); endif 3.3 sql%notfound:确定SQL语句执行是否成功,当SQL有作用行时,为false,否则为true 3.4 sql%rowcount:返回SQL语句所作用的总计行数
8、v_deptno emp.deptno%type:=&no; update emp set sal=sal*1.1 where deptno=v_deptno; dbms_output.put_line(修改了|sql%rowcount|行);显示游标事例:declare v_empno emp.empno%type; v_ename emp.ename%type; v_depno emp.depno%type; cursor emp_cursor is select empno,ename,depno from emp where depno=10;-定义区不能有into子句,可用order
9、by 分组查询,指定游标存储一个select查询的结果集; begin open emp_cursor;-是在执行定义区的select语句查询结果存在游标工作区中,指针指向第一列 loop fetch emp_cursor into v_empno,v_ename,v_depno;-into的变量要和游标中定义相同; exit when emp_cursor%notfound;-跳出循环,当没有数据响应时 dbms_output.put_line(To_char(v_empno)| |(v_ename)| |(v_depno); end loop; close emp_cursor; end;
10、 -游标可以循环(1)Loop exit when(2)for in ().()loop End loop;For 循环省去游标声明、打开、提取、测试、关闭等语句DECLARECURSOR emp_cursor IS -SELECT last_name, department_idFROM employees;BEGINFOR emp_record IN emp_cursor LOOP-*_record为指定语法- implicit open and implicit fetch occurIF emp_record.department_id = 80 THEN.END LOOP; - im
11、plicit close occursEND;游标可以带参数DECLARECURSOR emp_cursor(p_deptno NUMBER, p_job VARCHAR2) ISSELECT employee_id, last_nameFROM employeesWHERE department_id = p_deptnoAND job_id = p_job;BEGINOPEN emp_cursor (80, SA_REP);. . .CLOSE emp_cursor;OPEN emp_cursor (60, IT_PROG);. . .END; 4.事务控制语句 事务控制语句包括COMMI
12、T,ROLLBACK以及SAVEPOINT等三种语句 v_sal emp.sal%type:=&salary; v_ename emp.ename%type:=&name; update emp set sal=v_sal where ename=v_ename; commit; exception when others then rollback; insert into temp values(1); savepoint a1; insert into temp values(2); savepoint a2; insert into temp values(3); savepoint
13、a3; rollback to a2; commit; 5.控制结构 条件分支语句 5.1简单条件判断 v_sal number(6,2); select sal into v_sal from emp where lower(ename)=lowe(&name); if v_sal2000 then update emp set sal=v_sal+200 where lower(ename)=lower(&name) end if 5.2二重条件分支 v_comm number(6,2); select comm into v_comm from emp where empno=&no;
14、if v_comm0 then update emp set comm=v_comm+100 where empno=&no; else update emp set comm=200 where empno=&no; end if 5.3多重条件分支 v_job varchar2(10); v_sal number(6,2); select job,sal into v_job,v_sal from emp where empno=&no; if v_job=president then update emp set sal=v_sal+1000 where empno=&no; elsei
15、f v_job=manager then update emp set sal=v_sal+500 where empno=&no; else update emp set sal=v_sal+200 where empno=&no; end if; 5.4 CASE语句: 在CASE语句中使用单一选择符进行等值比较 declare v_deptno emp deptno%type; begin v_deptno:=&no; case v_deptno when 10 then update emp set comm=100 where deptno=v_deptno; when 20 the
16、n update emp set comm=80 where deptno=v_deptno; when 30 then update emp set comm=50 where deptno=v_deptno; else dbms_output.put_line(不存在); end case; end; 5.5 在CASE语句中使用多种条件比较 declare v_sal emp.sal%type; v_ename emp.ename%type; begin select ename,sal into v_ename,v_sal from emp where empno=&no; case
17、when v_sal1000 then update emp set comm=100 where ename=v_ename; when v_sal2000 then update emp set comm=80 where ename=v_ename; when v_sal6000 tehn update emp set comm=50 where ename=v_ename; end case; end; 5.6循环语句 有基本循环,WHILE循环,FOR循环 基本循环:一定要包含EXIT语句,定义循环控制变量 create table temp(cola int); declare i
18、 int:=1; begin loop insert into temp values(i); exit when i=10; i:=i+1; end loop; end; 5.7 WHILE循环:定义循环控制变量,并在循环体内改变循环控制变量的值 declare i int:=1; begin while i=10 loop insert into temp values(i); i:=i+1; end loop; end; 5.8 for循环:使用FOR循环时,ORACLE会隐含定义循环控制变量. for counter inreverse lower_bound.upper_bound
19、loop statement1; statement2; . end loop; 5.9 counter是循环控制变量,并且该变量由ORACLE隐含定义,不需要显示定义;lower_bound和upper_bound分别对应循环控制变量的上下界值.默认情况下,FOR循环,每次会自动增一,指定REVERSE选项时,每次循环控制变量会减一 begin for i in reverse 1.10 loop insert into temp values(i); end loop; end; 5.10嵌套循环和标号:通过在嵌套循环中使用标号,可以区分内层循环和外层循环,并且可以在内层循环中直接退出外层
20、循环 declare result int; begin for i in 1.100 loop for j in 1.100 loop result:=i*j; exit outer when result=1000; exit when result=500; end loop inner; dbms_ouput.put_line(result); end loop outer; dbms_output.put_line(result); end; 6.顺序控制语句 PL/SQL不仅提供了条件分支语句和循环控制语句,而且还提供了顺序控制语句GOTO和NULL.一般情况下不使用 6.1 GO
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- oracle pl学习笔记-网 pl 学习 笔记
![提示](https://www.taowenge.com/images/bang_tan.gif)
限制150内