数据库培训PLSQL.ppt
《数据库培训PLSQL.ppt》由会员分享,可在线阅读,更多相关《数据库培训PLSQL.ppt(43页珍藏版)》请在课桌文档上搜索。
1、数据库培训PL/SQL基础,2,培训内容,PL/SQL程序结构基本语法要素流程控制事务处理游标异常处理存储过程和函数程序包触发器,3,PL/SQL程序结构,PL/SQL:过程化SQL语言 PL/SQL块语法 DECLARE-declaration statements BEGIN-executable statements EXCEPTION-exception statements END,4,基本语法要素,常量变量符合数据类型变量表达式函数ODS变量命名规范,5,常量,语句格式:常量名 CONSTANT 类型标识符 not null:=值;例:avc_acct_id CONSTANT VA
2、RCHAR2(5)NOT NULL:=AP001;,6,变量,语句格式 变量名 类型标识符 not null:=值;例:avc_serv_id VARCHAR2(5)NOT NULL:=SV001;基本数据类型 number int char()varchar()varchar2()long date boolean:ture false null,7,复合数据类型变量,使用type%定义变量 avc_no dept.deptno%type;定义记录类型变量使用rowtype%定义变量一维表类型变量多维表类型变量,8,表达式,算术表达式逻辑表达式字符表达式关系表达式,9,函数,数字函数字符函数
3、转换函数日期函数常规函数,10,ODS变量命名规范,create or replace procedure p_tf_acct_income_mon(/*统计分析_收入情况(月)模块名称:p_tf_acct_income_mon 生成周期:按月执行 数据来源:FAS.TF_ACCT_ITEM 数据目标:统计分析_收入情况(月)(TF_ACCT_INCOME_MON)*/avc_cycleid varchar2,-数据周期 avc_lastcycleid varchar2,-上一次成功数据周期 an_return out number,-返回值(0:表示成功-1:表示失败)an_syserr o
4、ut number,-系统错误号 an_record out number,-总记录数 avc_syserrtext out varchar2-系统错误文本)is n_point varchar2(10);vc_sql varchar2(4000);begin.end p_tf_acct_income_mon;,11,流程控制,条件控制循环控制,12,条件控制,If 条件1 then 语句段1;Elsif 条件2 then if(条件4)then 语句段2;end if;Else 语句段3;End if;,13,循环控制,Loop循环While 循环For 循环,14,Loop循环,Loop
5、循环语句1 If 条件语句 then exit;else 语句2 end if;End loop;,15,Loop循环,Loop 循环语句1 语句2exit when 条件语句;End loop;,16,For 循环,for 循环变量 in reverse 循环上届.下届循环 loop 循环处理语句;End loop;,17,事务处理,Commit 命令 用 set auto onoff;来打开,关闭自动提交Rollback 命令Savepoint命令,18,游标,游标的作用隐式游标显示游标游标属性引用游标/动态游标,19,游标的作用,从数据库中提取出数据,以临时表的形式放在内存中。初始指向首
6、记录,利用fetch移动指针,对游标中的数据进行处理,然后写到结果表中。,20,显示游标,select语句上 使用显式游标,明确能访问结果集FOR循环游标(常用的一种游标)转换函数fetch游标参数游标,21,FOR循环游标,定义游标定义游标变量使用for循环来使用这个游标 前向游标 只能往一个方向走 效率很高declare-类型定义 cursor cc is select empno,ename,job,sal from emp where job=MANAGER;-定义一个游标变量 ccrec cc%rowtype;begin-for循环 for ccrec in cc loop dbms
7、_output.put_line(ccrec.empno|-|ccrec.ename|-|ccrec.job|-|ccrec.sal);end loop;end;,22,fetch游标,使用的时候 必须要明确的打开和关闭declare-类型定义 cursor cc is select empno,ename,job,sal from emp where job=MANAGER;-定义一个游标变量 ccrec cc%rowtype;begin-打开游标 open cc;-loop循环 loop-提取一行数据到ccrec中 fetch cc into ccrec;-判断是否提取到值,没取到值就退出
8、-取到值cc%notfound 是false-取不到值cc%notfound 是true exit when cc%notfound;dbms_output.put_line(ccrec.empno|-|ccrec.ename|-|ccrec.job|-|ccrec.sal);end loop;-关闭 close cc;end;,23,游标属性,游标的属性4种%notfound fetch是否提到数据 没有true 提到false%found fetch是否提到数据 有true 没提到false%rowcount 已经取出的记录的条数%isopen 布尔值 游标是否打开declare-类型定义
9、 cursor cc is select empno,ename,job,sal from emp where job=MANAGER;-定义一个游标变量 ccrec cc%rowtype;begin-打开游标 open cc;-loop循环 loop-提取一行数据到ccrec中 fetch cc into ccrec;-判断是否提取到值,没取到值就退出-取到值cc%notfound 是false-取不到值cc%notfound 是true exit when(cc%notfound or cc%rowcount=3);dbms_output.put_line(cc%rowcount|-|cc
10、rec.empno|-|ccrec.ename|-|ccrec.job|-|ccrec.sal);end loop;-关闭 close cc;end;,24,参数游标,按部门编号的顺序输出部门经理的名字 declare-部门 cursor c1 is select deptno from dept;-参数游标c2,定义参数的时候-只能指定类型,不能指定长度-参数只能出现在select语句=号的右侧 cursor c2(no number,pjob varchar2)is select emp.*from emp where deptno=no and job=pjob;c1rec c1%row
11、type;c2rec c2%rowtype;-定义变量的时候要指定长度 v_job varchar2(20);begin-部门 for c1rec in c1 loop-参数在游标中使用 for c2rec in c2(c1rec.deptno,MANAGER)loop dbms_output.put_line(c1rec.deptno|-|c2rec.ename);end loop;end loop;end;,25,综合例子,题目 求购买的商品包括了顾客“Dennis”所购买商品的顾客(姓名);create table purcase(productid number,customerid
12、number);create table customer(customerid number,name varchar(30);思路:Dennis(A,B)别的顾客(A,B,C)(A,C)(B,C)C,26,declare-Dennis所购买的商品 cursor cur_dennis is select productid from purcase where customerid=(select customerid from customer where name=Dennis);-除Dennis以外的每个顾客 cursor cur_cust is select customerid f
13、rom customer where name Dennis;-每个顾客购买的商品 cursor cur_prod(id varchar2)is select productid from purcase where customerid=id;j number;i number;rec_dennis cur_dennis%rowtype;rec_cust cur_cust%rowtype;rec_prod cur_prod%rowtype;avc_name varchar2(10);begin-顾客循环 for rec_cust in cur_cust loop i:=0;j:=0;for
14、rec_dennis in cur_dennis loop i:=i+1;-每个顾客买的东西 for rec_prod in cur_prod(rec_cust.customerid)loop if(rec_prod.productid=rec_dennis.productid)then j:=j+1;end if;end loop;end loop;if(i=j)then select name into avc_name from customer where customerid=rec_cust.customerid;DBMS_output.put_line(avc_name);end
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据库 培训 PLSQL

链接地址:https://www.desk33.com/p-250675.html