5 1 1 PLSQL PLSQL DECLARE xm varchar

  • Slides: 48
Download presentation

5. 1. 1 PL/SQL语言 用PL/SQL编制的程序代码如下所示 DECLARE xm varchar 2(8): =’张琼’; zym varchar 2(10): =’计算机’;

5. 1. 1 PL/SQL语言 用PL/SQL编制的程序代码如下所示 DECLARE xm varchar 2(8): =’张琼’; zym varchar 2(10): =’计算机’; zxf number(2): =45; /*定义变量类型*/ BEGIN UPDATE XS SET zxf=zxf WHERE xm=xm; /*更新学生表*/ IF SQL%NOTFOUND THEN /*检查记录是否存在,如果不存在就插入记录*/ INSERT INTO XS(XH, XM, ZYM, ZXF) VALUES(xs_sequence. NEXTVAL, xm, zym, zxf); END IF; END; 使用PL/SQL的主要有以下好处: (1)有利于客户/服务器环境应用的运行。 (2)适合于客户环境。

5. 2. 2 运算符 【例5. 2】(1) 查看计算机基础的平均成绩。 SELECT AVG(CJ) FROM XS_KC WHERE KCH =

5. 2. 2 运算符 【例5. 2】(1) 查看计算机基础的平均成绩。 SELECT AVG(CJ) FROM XS_KC WHERE KCH = ’ 101’; (2) 查询总学分在 40~ 50的学生学号和姓名。 SELECT XH, XM, ZXF FROM XS WHERE ZXF BETWEEN 40 AND 50; (3) 使用>= 和<=代替 BETWEEN实现与上例相同的功能。 SELECT XH, XM, ZXF FROM XS WHERE ZXF >=40 AND ZXF<=50;

5. 3. 4 对象类型 2. 利用命令定义 语法格式: CREATE OR REPLEACE TYPE schema. type_name [AUTHID

5. 3. 4 对象类型 2. 利用命令定义 语法格式: CREATE OR REPLEACE TYPE schema. type_name [AUTHID {CURRENT_USER | DEFINER}] AS OBJECT ( attribute 1 datatype, [attribute 2 datatype, ] … [attributen datatype] [method 1] [method 2] … [methodn]

5. 3. 4 对象类型 【例5. 4】定义一个简单的对象类型。 CREATE OR REPLEACE TYPE TEST_OBJ AS OBJECT (

5. 3. 4 对象类型 【例5. 4】定义一个简单的对象类型。 CREATE OR REPLEACE TYPE TEST_OBJ AS OBJECT ( item_id CHAR(6), price NUMBER(10, 2) );

5. 4 PL/SQL基本程序结构和语句 【例5. 5】查询总学分>40的学生人数。 DECLARE v_num number(3); BEGIN SELECT COUNT(*) INTO v_num FROM

5. 4 PL/SQL基本程序结构和语句 【例5. 5】查询总学分>40的学生人数。 DECLARE v_num number(3); BEGIN SELECT COUNT(*) INTO v_num FROM xs WHERE zxf>40; IF v_num<>0 THEN dbms_output. put_line(‘总学分>40的人数为:’ || TO_CHAR(v_num)); END IF; END; IF-THEN语句可以嵌套使用

5. 4 PL/SQL基本程序结构和语句 【例5. 6】判断计算机系总学分>40的人数是否超过80人。 DECLARE v_num number(3); BEGIN SELECT COUNT(*) INTO v_num FROM

5. 4 PL/SQL基本程序结构和语句 【例5. 6】判断计算机系总学分>40的人数是否超过80人。 DECLARE v_num number(3); BEGIN SELECT COUNT(*) INTO v_num FROM xs WHERE zxf>40 AND zym=’计算机’; IF v_num<>0 THEN IF v_num>80 THEN dbms_output. put_line(‘计算机系总学分>40的人数超过 80人’); END IF; END;

5. 4 PL/SQL基本程序结构和语句 【例5. 7】如果“数据库原理”课程的平均成绩高于75,则显示“平均成 绩大于75”,否则显示“平均成绩小于75”。 DECLARE v_avg number(4, 2); BEGIN SELECT AVG(cj) INTO

5. 4 PL/SQL基本程序结构和语句 【例5. 7】如果“数据库原理”课程的平均成绩高于75,则显示“平均成 绩大于75”,否则显示“平均成绩小于75”。 DECLARE v_avg number(4, 2); BEGIN SELECT AVG(cj) INTO v_avg FROM xs, xs_kc, kc WHERE xs. xh=xs_kc. xh AND xs_kc. kch=kc. kch AND kc. kcm=’数据库原理’; IF v_avg>75 THEN dbms_output. put_line(‘平均成绩大于75’); ELSE dbms_output. put_line(‘平均成绩小于75’); END IF; END; IF-THEN-ELSE语句也可以嵌套。

5. 4 PL/SQL基本程序结构和语句 1. IF逻辑结构 (3)IF-THEN-ELSE 语法格式: IF Boolean_expression 1 THEN Run_expression 1 ELSIF

5. 4 PL/SQL基本程序结构和语句 1. IF逻辑结构 (3)IF-THEN-ELSE 语法格式: IF Boolean_expression 1 THEN Run_expression 1 ELSIF Boolean_expression 2 THEN Run_expression 2 ELSE Run_expression 3 END IF IF-THEN-ELSE语句可以用流程图 5. 7表示。

5. 4 PL/SQL基本程序结构和语句 【例5. 8】求ax 2+bx+c=0的根。 DECLARE a number; b number; c number; x

5. 4 PL/SQL基本程序结构和语句 【例5. 8】求ax 2+bx+c=0的根。 DECLARE a number; b number; c number; x 1 number; x 2 number; d number; BEGIN a: =1; b: =4; c: =3; d: =b*b-4*a*c; IF a=0 THEN x 1: =-c/b; dbms_output. put_line(‘只有一个平方根’ || to_char(x 1)); ELSIF d<0 THEN dbms_output. put_line(‘没有算术平方根’); ELSE x 1: =(-b+sqrt(d))/(2*a); x 2: =(-b-sqrt(d))/(2*a); dbms_output. put_line(‘第一个平方根’ || to_char(x 1)); dbms_output. put_line(‘第二个平方根’ || to_char(x 2)); END IF; END;

5. 4. 2 循环结构 【例5. 9】求10的阶乘。 DECLARE n NUMBER: =1; count 1 NUMBER: =2;

5. 4. 2 循环结构 【例5. 9】求10的阶乘。 DECLARE n NUMBER: =1; count 1 NUMBER: =2; BEGIN LOOP n: =n*count 1; count 1: =count 1+1; IF count 1>10 THEN EXIT; END IF; END LOOP; dbms_output. put_line(to_char(n)); END;

5. 4. 2 循环结构 【例5. 10】求10的阶乘。 DECLARE n NUMBER: =1; count 1 NUMBER: =2;

5. 4. 2 循环结构 【例5. 10】求10的阶乘。 DECLARE n NUMBER: =1; count 1 NUMBER: =2; BEGIN LOOP n: =n*count 1; count 1: =count 1+1; EXIT WHEN count 1=11; END LOOP; dbms_output. put_line(to_char(n)); END;

5. 4. 2 3. WHILE-LOOP-END循环 语法格式: WHILE Boolean_expression LOOP Run_expression END LOOP; 此结构的执行如流程图 5.

5. 4. 2 3. WHILE-LOOP-END循环 语法格式: WHILE Boolean_expression LOOP Run_expression END LOOP; 此结构的执行如流程图 5. 9所示。 循环结构 /*测试Boolean_expression是否符合退出条件*/ 流程图 5. 9 WHILE-LOOP-END执行流程 /*执行循环体*/

5. 4. 2 循环结构 【例5. 11】用WHILE-LOOP-END循环结构求10的阶层。 DECLARE n NUMBER: =1; count 1 NUMBER: =2;

5. 4. 2 循环结构 【例5. 11】用WHILE-LOOP-END循环结构求10的阶层。 DECLARE n NUMBER: =1; count 1 NUMBER: =2; BEGIN WHILE count 1<=10 LOOP n: =n*count 1; count 1: =count 1+1; END LOOP; dbms_output. put_line(to_char(n)); END;

5. 4. 2 循环结构 【例5. 12】用FOR-IN-LOOP-END循环结构求10的阶层。 DECLARE n NUMBER: =1; count 1 NUMBER; BEGIN

5. 4. 2 循环结构 【例5. 12】用FOR-IN-LOOP-END循环结构求10的阶层。 DECLARE n NUMBER: =1; count 1 NUMBER; BEGIN FOR count 1 IN 2. . 10 LOOP n: =n*count 1; END LOOP; dbms_output. put_line(to_char(n)); END; 程序中变量count是控制循环次数的计数器。计数器初始值是 2,终值是 10,步长为 1。每循环一次,count会自动累加 1,直到count大于终值 10(count=11时)跳出循环。

5. 4. 3 选择语句 1. CASE语句是在Oracle 9 i才引入的,它可以使用简单的结构,对数值列表做出选择。 语法格式: CASE input_name WHEN expression 1

5. 4. 3 选择语句 1. CASE语句是在Oracle 9 i才引入的,它可以使用简单的结构,对数值列表做出选择。 语法格式: CASE input_name WHEN expression 1 THEN 语句序列 1 WHEN expression 2 THEN 语句序列 2 … WHEN expression. N THEN 语句序列n [ELSE 语句序列] END;

5. 4. 3 选择语句 【例5. 13】CASE语句应用。 DECLARE V_kch char(3); v_Result varchar 2(16); BEGIN SELECT

5. 4. 3 选择语句 【例5. 13】CASE语句应用。 DECLARE V_kch char(3); v_Result varchar 2(16); BEGIN SELECT kch INTO v_kch FROM kc WHERE kkxq=’ 1’; CASE v_kch /*判断v_kch的值,并给出结果 */ WHEN ‘ 101’ THEN v_Result: =’计算机基础’; WHEN ‘ 102’ THEN v_Result: =’程序设计语言’; WHEN ‘ 206’ THEN v_Result: =’离散数学’; WHEN ‘ 208’ THEN v_Result: =’数据结构’; ELSE v_Result: =’Nothing’; END CASE; dbms_output. put_line(v_result); END;