Oracle基础 - PLSQL基础知识 1

上传人:woxinch****an2018 文档编号:56896273 上传时间:2018-10-16 格式:PPTX 页数:51 大小:148.33KB
返回 下载 相关 举报
Oracle基础 - PLSQL基础知识 1_第1页
第1页 / 共51页
Oracle基础 - PLSQL基础知识 1_第2页
第2页 / 共51页
Oracle基础 - PLSQL基础知识 1_第3页
第3页 / 共51页
Oracle基础 - PLSQL基础知识 1_第4页
第4页 / 共51页
Oracle基础 - PLSQL基础知识 1_第5页
第5页 / 共51页
点击查看更多>>
资源描述

《Oracle基础 - PLSQL基础知识 1》由会员分享,可在线阅读,更多相关《Oracle基础 - PLSQL基础知识 1(51页珍藏版)》请在金锄头文库上搜索。

1、PLSQL基础知识,郑欣,SQL与PLSQL,SQL是操作所有关系型数据库的规则,因为我们的数据大多都 存放在ORACLE数据库中,且对于关系型数据库而言,只能用SQL规则去操作,所有需要在程序中获取数据库的数据进行操作,所以必须学习SQL。主要在程序开发中,对数据的存取进行的一系统操作。容易调试,错误提示,直截了当 SQL强调结果,忽略了过程。,SQL与PLSQL,PLSQL是专用于ORACLE服务器,在SQL基础之上,添加了一些过程化控制语句。过程化包括有:类型定义,判断,循环,游标,异常或例外处理。ORACLE数据库服务器对SQL做了符合自身的特点的扩展。即PLSQL只能在ORACLE数

2、据库服务器中运行因此:PLSQL=SQL+ORACLE自身的扩展,PLSQL强调过程,为什么要用PLSQL,因为SQL是第四代命令式语言,无法显示处理过程化的业务,所以得用一个过程化程序设计语言来弥补SQL的不足之处,SQL和PLSQL不是替代关系,是弥补关系,PLSQL程序的完整组成结构如下,declare变量声明;变量声明;beginDML/TCL操作;exception例外处理;例外处理; end;/注意:在PLSQL程序中,;号表示每条语句的结束,/表示整个PLSQL程序结束。执行一次后,可以输入“/”再执行一次。,书写PLSQL的工具有,(1)SQLPLUS工具 (2)SQLDeve

3、loper工具 (3)第三方工具(PLSQL & 其它),PLSQL与SQL执行有什么不同,(1)SQL是单条执行的 (2)PLSQL是整体执行的,不能单条执行,整个PLSQL结束用/,其中每条语句结束用;号,写一个PLSQL程序,输出“hello world“字符串, 语法:dbms_output.put_line(需要输出的字符串); 会自动换行。 begin-向SQLPLUS客户端工具输出字符串dbms_output.put_line(hello 你好); end; /,写一个PLSQL程序,注意: dbms_output是oracle中的一个输出对象 put_line是上述对象的一个方

4、法,用于输出一个字符串自动换行 设置显示PLSQL程序的执行结果,默认情况下,不显示PLSQL程序的执行结果,语法:set serverout on/off; set serveroutput on;,变量及声明,选择变量名称的规则 变量必须以字母(AZ)开头 其后跟可选的一个或多个字母、数字(09)或特殊字符$、# 或_ 变量长度不超过30个字符 变量名中不能有空格,变量及声明,声明变量或常量的通用语法 变量名 数据类型 DEFAULT|:=值; 如: Year_rate number :=1.23; Day_rate number default 0.08; Pi constant num

5、ber(9):=3.1415926;,变量及声明,定义与表某个字段类型相同的类型,可以不知道字段的类型,可以根据原对象进行实时更新语法:变量名 表名.字段%TYPE;实际开发中常使用%type,而不常用%rowtype,变量及声明,例:输出7369号员工姓名和工资。declare-定义二个变量,分别装姓名和工资pename emp.ename%type;psal emp.sal%type; begin -SQL语句-select ename,sal from emp where empno = 7369;-PLSQL语句,将ename的值放入pename变量中,sal的值放入psal变量中 s

6、elect ename,sal into pename,psal from emp where empno = 7369;-输出dbms_output.put_line(7369号员工的姓名是|pename|,薪水是|psal); end; /,变量及声明,将一条记录的所有字段都保存到一个变量中的语法:变量 表名%ROWTYPE;例:定义行变量 Declareemp_record emp%rowtype; Begin End / 注意:定义成%rowtype的变量,必须要与表结构的字段完全一样。可以根据原对象进行实时更新,变量及声明,范例:输出7788号员工姓名和工资 declareemp_r

7、ecord emp%rowtype; beginselect * into emp_record from emp where empno = 7788;dbms_output.put_line(7788号员工的姓名是|emp_record.ename|,薪水是|emp_record.sal); end; /,变量作用范围及可见性,变量的作用范围是在你所引用的程序单元(块、子程序、包)内。即从声明变量开始到该块的结束。一个变量(标识)只能在你所引用的块内是可见的。当一个变量超出了作用范围,PL/SQL引擎就释放用来存放该变量的空间(因为它可能不用了)。 在子块中重新定义该变量后,它的作用仅在该

8、块内。,建议变量的命名方法:,常用运算符、表达式,常用运算符、表达式,PL/SQL的控制结构,选择条件结构 循环结构 顺序结构包括如下三类:条件控制语句: IF 语句 循环语句: LOOP语句, EXIT语句 顺序语句: GOTO语句, NULL语句,选择结构,1) IF THENPL/SQL 和 SQL语句END IF;2) IF THENPL/SQL 和 SQL语句ELSE其它语句END IF;,选择结构,3) IF THEN PL/SQL 和 SQL语句 ELSIF THEN 其它语句 ELSIF THEN 其它语句 ELSE 其它语句 END IF;,选择结构,范例:使用if-else

9、-end if显示今天星期几,是“工作日“还是“休息日“ declarepday varchar2(10); beginselect to_char(sysdate,day) into pday from dual;dbms_output.put_line(今天是|pday);if pday in (星期六,星期日) thendbms_output.put_line(休息日);elsedbms_output.put_line(工作日);end if; end; /,选择结构,从键盘接收值,使用if-elsif-else-end if显示“age16“,“age30“,“age60“,“age8

10、0“ declareage number(3) := /,NULL结构,空操作或空值结构 处理方法 if count60 thenNull; elseINSERT INTO member VALUES(1,jack); end if;,循环结构,1. 简单循环 LOOP要执行的语句; EXIT WHEN ; /*条件满足,退出循环语句*/ END LOOP;,循环结构,例:使用loop循环显示1-10 DECLAREint NUMBER(2) :=0; BEGINLOOPint := int + 1;DBMS_OUTPUT.PUT_LINE(int 的当前值为:|int);EXIT WHEN

11、int =10;END LOOP; END;,循环结构,2、WHILE 循环 WHILE LOOP要执行的语句; END LOOP;,循环结构,例:使用while循环显示1-10 DECLARE x NUMBER; BEGINx:= 1;WHILE x10 LOOPDBMS_OUTPUT.PUT_LINE(X的当前值为:|x);x:= x+1;END LOOP; END;,循环结构,使用while循环,向emp表中插入999条记录 declarei number(4) := 1; begin while( i 1000 )loopinsert into emp(empno,ename) val

12、ues(i,哈哈);i := i + 1;end loop; end; /,循环结构,2、FOR循环 FOR 循环计数器 IN REVERSE 下限 上限 LOOP要执行的语句; END LOOP;每循环一次,循环变量自动加1; 使用关键字REVERSE,循环变量自动减1。跟在IN REVERSE 后面的数字必须是从小到大的顺序,而且必须是整数,不能是变量或表达式。可以使用EXIT 退出循环。注意,FOR循环不能自己设置步长。,循环结构,例:使用for循环显示20-30 declarei number(2) := 20; beginfor i in 20 30loopdbms_output.p

13、ut_line(i);end loop; end; /请大家使用FOR循环删除emp表中的999记录 请大家使用循环插入10万条记录看一下时间。Set timing on显示执行时间,循环结构,范例: DECLAREint NUMBER(2) :=0; BEGINLOOPint := int + 1;DBMS_OUTPUT.PUT_LINE(int 的当前值为:|int);EXIT WHEN int =10;END LOOP; END;,PLSQL游标/光标,从上向下依次获取每一记录的内容。游标分类: 无参游标 有参游标,游标的属性,%FOUND 布尔型属性,当最近一次读记录时成功返回,则值为

14、TRUE;%NOTFOUND 布尔型属性,与%FOUND相反;%ISOPEN 布尔型属性,当游标已打开时返回 TRUE;%ROWCOUNT 数字型属性,返回已从游标中读取的记录数。,游标的基本操作,(1)声明游标,使用查询来定义游标的列和行语法:CURSOR 游标名(参数名 数据类型,)IS SELECT 语句; 用于存储一个查询返回的多行数据 例:cursor emp_c is select empno,ename from emp;,游标的基本操作,(2)打开游标,使用PL/SQL命令OPEN来打开一个声明的游标 语法:OPEN 游标名; 例:open emp_c;,游标的基本操作,(3)

15、提取数据,从游标中重复提取每条记录到数据结构中,会自动向下移动,直到数据集合被提空 语法:FETCH 游标 INTO 变量;例: Declareeno emp.empno%type;ena emp.ename%type; fetch emp_c into eno,ena;,游标的基本操作,(4)关闭游标,使用完游标之后将其关闭 语法:CLOSE 游标;例:close emp_c;,游标的基本操作,范例:使用无参光标cursor,查询所有员工的姓名和工资【如果需要遍历多条记录时,使用光标cursor,无记录找到使用cemp%notfound】,游标的基本操作,declare-定义游标cursor

16、 cemp is select ename,sal from emp;-定义变量vename emp.ename%type;vsal emp.sal%type; begin-打开游标,这时游标位于第一条记录之前open cemp;-循环loop-向下移动游标一次fetch cemp into vename,vsal; -退出循环,当游标下移一次后,找不到记录时,则退出循环exit when cemp%notfound;-输出结果dbms_output.put_line(vename|-|vsal);end loop;-关闭游标close cemp; end; /,游标的基本操作,范例:使用带参光标cursor,查询10号部门的员工姓名和工资 declarecursor cemp(pdeptno emp.deptno%type) is select ename,sal from emp where deptno=pdeptno;pename emp.ename%type;psal emp.sal%type; begin open cemp( /,

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 中学教育 > 高中教育

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号