《oracle补充》PPT课件.ppt





《《oracle补充》PPT课件.ppt》由会员分享,可在线阅读,更多相关《《oracle补充》PPT课件.ppt(88页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、PL-SQL编程目标q 掌握如何定义变量并赋值q 掌握如何输出显示数据q 掌握IF、WHILE、CASE逻辑控制语句2PL/SQL块 qPL/SQL程序由三个块组成,即声明部分、执行部分、异常处理部分。qPL/SQL块的结构如下:块的结构如下:qDECLARE q/*声明部分:在此声明PL/SQL用到的变量,类型及游标,以及局部的存储过程和函数*/qBEGINq /*执行部分:过程及SQL 语句 ,即程序的主要部分 */qEXCEPTIONq /*执行异常部分:错误处理 */qEND;q其中 执行部分是必须的。3注释 q 在PL/SQL里,可以使用两种符号来写注释,即:q使用双-(减号)加注释
2、qPL/SQL允许用 来写注释,它的作用范围是只能在一行有效。如:qV_Sal NUMBER(12,2);-工资变量。q使用/*/来加一行或多行注释,如:q/*/q/*文件名:statistcs_sal.sql */q/*/4PL/SQL 变量类型 qPL/SQL支持多种数据类型,本节讨论代码中最常用并且最实用的数据类型。qVarchar2qNumberqDateqBoolean5Varchar2qVarchar2为可变长的字母数字数据类型。在PL/SQL中,varchar2的最大长度为32767字节。q在declare部分,其定义以分号(;)结束,所有varchar2变量的定义类似于下面的定
3、义:qvariable_name varchar2(max_length);q括号中的长度值为本变量的最大长度且必须是正整数,如:qvc_field varchar2(10);q在定义变量时,可以同时对其进行初始化,格式为:qvc_field varchar2(10):=STARTVALUE;6Numberqnumber类型数据可用来表示所有的数值数据,说明格式为:qnum_field number(precision,scale);q其中,precision可以有138个数字位,而scale表示在precision位数字中小数点后的数字位数,下面的定义:qnum_fieldnumber(12
4、,2);q表示num_field是一个整数部分最多10位、小数部分最多2位的变量。7Dateq此数据类型用于保存固定长度的日期值,date变量的说明为:qdate_field date;q在缺省时,Oracle以DD-MON-YY格式显示日期。因此,2004年9月9日显示为09-SEP-04。qPL/SQL中编程处理日期必须使用这种格式。是否可以说用户必须用数据库缺省的日期格式,除非用户用TO_CHAR或TO_DATE是否能提醒用户用自己的TO_DATE/TO_CHAR定义的格式而不依赖于缺省的日期格式。qq格式由初始化参数格式由初始化参数格式由初始化参数格式由初始化参数nls_date_fo
5、rmatnls_date_format设置设置设置设置也可通过也可通过也可通过也可通过setset设置设置设置设置 alter session set alter session set nls_date_formatnls_date_format=yyyy-mm-ddyyyy-mm-dd hh24:mi:ss hh24:mi:ss8Booleanq这种数据类型只有两个值:true或false。在使用boolean变量时,如果测试结果为true,则做某事,否则做另外的事。例如,如果试图考察某公司是否分发了一个10KB的2000年年度预算表,可用boolean变量。若该公司分发了此表,则该变量值
6、为true。q布尔值只有TRUE,FALSE及 NULL 三个值 9类型类型子类子类说说 明明范范 围围ORACLE限制限制CHARCharacterStringRowidNchar定长字符串定长字符串民族语言字符集民族语言字符集032767可选可选,确省确省=12000VARCHAR2Varchar,StringNVARCHAR2可变字符串可变字符串民族语言字符集民族语言字符集03276740004000BINARY_INTEGER带符号整数带符号整数,为整数计算优化性为整数计算优化性能能NUMBER(p,s)DecDouble precisionIntegerIntNumericRealS
7、mall int小数小数,NUMBER 的子类型的子类型高精度实数高精度实数整数整数,NUMBER 的子类型的子类型整数整数,NUMBER 的子类型的子类型与与NUMBER等价等价与与NUMBER等价等价整数整数,比比 integer 小小LONG变长字符串变长字符串0-214748364732,767字节字节DATE日期型日期型公元前公元前4712年年1月月1日至公元后日至公元后4712年年12月月31日日BOOLEAN布尔型布尔型TRUE,FALSE,NULL不使用不使用ROWID存放数据库行号存放数据库行号UROWID通用行标识符,字符类型通用行标识符,字符类型10变量q(1)声明变量q
8、 声明变量的语句格式如下:qVariable_name CONSTANT datatype NOT NULL:=|DEFAULT qexpressionq 注意:可以在声明变量的同时给变量强制性的加上NOT NULL约束条件,此时变量在初始化时必须赋值。q(2)给变量赋值q 给变量赋值有两种方式:q 直接给变量赋值q 通过SQL SELECT INTO 给变量赋值11qv_ename varchar2(10);qv_sal number(6,2);qv_tax_rate constant number(3,2):=5.5qv_hiredate DATE;12qdeclareqx varchar
9、(20);qbeginqx:=This is.;qdbms_output.put_line(x:|x);qend;13q 数据库赋值是通过 SELECT语句来完成的,每次执行 SELECT语句就赋值一次,一般要求被赋值的变量与SELECT中的列名要一一对应。qDECLAREqemp_id emp.empno%TYPE;qemp_name emp.ename%TYPE;qwages emp.sal%TYPE;qBEGINq Emp_id:=7788;qSELECT ename,NVL(sal,0)+NVL(comm,0)INTO emp_name,wages qFROM emp WHERE em
10、pno=emp_id;qDbms_output.put_line(emp_name|-|to_char(wages);qEND;14 可转换的类型赋值 qCHAR 转换为转换为 NUMBER:q使用 TO_NUMBER 函数来完成字符到数字的转换,如:qv_total :=TO_NUMBER(100.0)+sal;qNUMBER 转换为转换为CHAR:q 使用 TO_CHAR函数可以实现数字到字符的转换,如:qv_comm:=TO_CHAR(123.45)|元;q字符转换为日期:字符转换为日期:q使用 TO_DATE函数可以实现 字符到日期的转换,如:qv_date:=TO_DATE(2001
11、.07.03,yyyy.mm.dd);q日期转换为字符日期转换为字符q使用 TO_CHAR函数可以实现日期到字符的转换,如:qv_to_day:=TO_CHAR(SYSDATE,yyyy.mm.dd hh24:mi:ss);15q使用代替变量输入雇员编号,分别保存员工名,工资,显示输出各变量的值qdeclareqv_name varchar2(5);qv_sal number(6,2);qbeginqselect ename,sal into v_name,v_sal from emp where empno=&no;qdbms_output.put_line(name:|v_name);qd
12、bms_output.put_line(sal:|v_sal);qend;q/16练习q使用代替变量输入雇员编号,分别保存员工名,工资,个人所得税,显示输出各变量的值q其中个人所得数计算方式工资的3%17使用使用%TYPEq%TYPE%TYPE:使一个变量的数据类型与另一个变量:使一个变量的数据类型与另一个变量:使一个变量的数据类型与另一个变量:使一个变量的数据类型与另一个变量(尤其是表的列)数据类型一致,(尤其是表的列)数据类型一致,(尤其是表的列)数据类型一致,(尤其是表的列)数据类型一致,oracleoracle提供的提供的提供的提供的一种定义方式一种定义方式一种定义方式一种定义方式18
13、复合变量q ORACLE 在 PL/SQL 中除了提供象前面介绍的各种类型外,还提供一种称为复合类型的类型-记录和表 q定义记录类型语法如下定义记录类型语法如下:qTYPE record_type IS RECORD(q Field1 type1 NOT NULL :=exp1,q Field2 type2 NOT NULL :=exp2,q .q Fieldn typen NOT NULL :=expn );19qDECLARE q TYPE test_rec IS RECORD(q Code VARCHAR2(10),q Name VARCHAR2(30)NOT NULL:=a book)
14、;q V_book test_rec;qBEGINq V_book.code:=123;q V_book.name:=C+Programming;q DBMS_OUTPUT.PUT_LINE(v_book.code|v_book.name);qEND;20%ROWTYPEq%ROWTYPE%ROWTYPE:使一个变量的数据类型与参照表的数:使一个变量的数据类型与参照表的数:使一个变量的数据类型与参照表的数:使一个变量的数据类型与参照表的数据类型一致,据类型一致,据类型一致,据类型一致,oracleoracle提供的一种定义方式提供的一种定义方式提供的一种定义方式提供的一种定义方式21PL/SQ
15、L语法语法qRECORDRECORD:记录类型。类似于:记录类型。类似于:记录类型。类似于:记录类型。类似于c c语言中的语言中的语言中的语言中的structurestructure22插入语句qdeclareqv_deptno dept.deptno%type;qv_dname dept.dname%type;qbeginqv_deptno:=&no;qv_dname:=&name;qinsert into dept(deptno,dname)values(v_deptno,v_dname);qend;q/23使用子查询插入qdeclareqv_deptno dept.deptno%type
16、:=&no;qbeginqinsert into employee select*from emp where detno=v_deptno;qend;q/24更新数据q使用表达式更新列q使用子查询更新列25删除记录q使用变量删除数据q使用子查询删除记录qdeclareqv_ename emp.ename%type:=&name;qbeginqupdate emp set(sal,comm)=q(select sal+100,comm+100 from emp where ename=v_name)qwher job=(select job from emp where ename=v_ena
17、me)qend;q/26PL/SQL结构控制语句结构控制语句qqIf If语句语句语句语句if then;if then;else;else;end ifend ifif if 条件表达式条件表达式条件表达式条件表达式1 then;1 then;elsifelsif 条件表达式条件表达式条件表达式条件表达式2 then;2 then;elsifelsif 条件表达式条件表达式条件表达式条件表达式3 then;3 then;else;else;end ifend ifqq例例例例27SQL get E:SQL get E:jhrdocumentjhrdocument 备课备课备课备课oracle
18、oracle脚本脚本脚本脚本if1.txtif1.txt 1 declare 1 declare 2 2 v_scorev_score integer;integer;3 begin 3 begin 4 select score into 4 select score into v_scorev_score 5 from 5 from courseadmin.courseresultscourseadmin.courseresults 6 where 6 where sidsid=200301 and cid=1;=200301 and cid=1;7 if 7 if v_scorev_sco
19、re=60 then=60 then 8 8 dbms_output.put_linedbms_output.put_line(及格及格及格及格););9 else 9 else 10 10 dbms_output.put_linedbms_output.put_line(不及格不及格不及格不及格););11 end if;11 end if;12*end;12*end;SQL/SQL/及格及格及格及格28PL/SQL结构控制语句结构控制语句qqCaseCase结构结构结构结构qqCase Case 变量或表达式变量或表达式变量或表达式变量或表达式 when when 条件表达式条件表达式条件
20、表达式条件表达式1 then;1 then;when when 条件表达式条件表达式条件表达式条件表达式2 then;2 then;when when 条件表达式条件表达式条件表达式条件表达式3 then;3 then;else;else;end caseend case;qq例例例例29SQL get E:jhrdocument备课oracle脚本case.txt 1 declare 2 v_score integer;3 begin 4 select score into v_score 5 from courseadmin.courseresults 6 where sid=200301
21、 and cid=1;7 case 8 when v_score=90 then dbms_output.put_line(优秀);9 when v_score=80 and v_score=70 and v_score=60 and v_score/中等30课堂练习课堂练习:课堂练习:请根据平均分和下面的评分规则,编写请根据平均分和下面的评分规则,编写PL-SQL语句输入学生学号查询学语句输入学生学号查询学员的成员的成 绩,如上图所示。绩,如上图所示。优优:90分以上分以上 良良:8089分分 中中:7079分分 差差:6069分分 不及格不及格:60分以下分以下如果输入如果输入s25303
22、,则显示,则显示该学生成绩:中该学生成绩:中学员成绩分析学员成绩分析31PL/SQL结构控制语句结构控制语句qqLoopLoopqqLoopLoopexit exit /exit when/exit when 条件表达式条件表达式条件表达式条件表达式循环体循环体循环体循环体end loopend loopqq例子例子例子例子3233PL/SQL结构控制语句结构控制语句qqWhileWhileWhileWhile语句语句语句语句qqWhile While While While 条件表达式条件表达式条件表达式条件表达式 looplooplooploop循环体循环体循环体循环体end loopen
23、d loopend loopend loopqq例子例子例子例子 declare i integer;declare i integer;declare i integer;declare i integer;begin i:=1;begin i:=1;begin i:=1;begin i:=1;while i 100 loop while i 100 loop while i 100 loop while i 100 loop i:=i+1;i:=i+1;i:=i+1;i:=i+1;end loop;end loop;end loop;end loop;dbms_output.put_lin
24、e(idbms_output.put_line(idbms_output.put_line(idbms_output.put_line(i););););end;end;end;end;34PL/SQL结构控制语句结构控制语句qqFor For 语句语句语句语句qqFor For 循环变量循环变量循环变量循环变量 in in 初值表达式初值表达式初值表达式初值表达式.终值表达式终值表达式终值表达式终值表达式 looploop循环体循环体循环体循环体end loopend loopqq例例例例 declare declare vsumvsum integer;integer;begin begi
25、n vsumvsum:=0;:=0;for i in 1.100 loop for i in 1.100 loop vsumvsum:=:=vsum+ivsum+i;end loop;end loop;dbms_output.put_line(vsumdbms_output.put_line(vsum););end;end;35标号和GOTO qPL/SQL中中GOTO语句是无条件跳转到指定的标号语句是无条件跳转到指定的标号去的意思。语法如下:去的意思。语法如下:qGOTO label;q.q/*标号是用标号是用括起来的标识符括起来的标识符*/36qdeclareqx number;qbegi
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- oracle补充 oracle 补充 PPT 课件

限制150内