流程控制语句
1-声明三个变量,初始值 分别为1,2,3,然后输出三个值的平均值、三个值的最大值。declare…begin…end
2-number(7) number(7,2) 举例说明区别
3-字符类型主要包括哪些?
字符类型主要包括varchar2、char、long、nchar和nvarchar2等。
char(m) m<32767 有默认值1
VARCHAR2(m) m为字符串的最大长度,m<32767,比较节省空间
CHAR(m) m为字符串的最大长度,m<32767,有默认值1,长度不足32767的位数由空格补全,占用空间.
LONG 最大长度可达2G,基本上所有字符串都可以用LONG定义
4-列举基本数据类型和三种特殊数据类型
基本数据类型:
(1)数值类型:number、pls_integer和binary_integer;
(2)字符类型:varchar2、char、long、nchar和nvarchar2等。
(3)日期类型:date
(4)布尔类型:boolean
特殊数据类型:
(1)%type类型:使用%TYPE关键字可以声明一个与指定列名称相同的数据类型,它通常紧跟在指定列名的后面。
如v_job emp.job%type;
(2)RECORD类型:多个变量的集合
type emp_record is record(
v1 varchar2,
v2 number
);
(3)%ROWTYPE类型:%ROWTYPE类型的变量结合了%TYPE类型和RECORD类型变量的优点,可以根据数据表中行的结构定义一种特殊的数据类型,用来存储从数据表中检索到的一行数据。语法如下所示:
rowVar_name table_name%rowtype;
5-使用%type定义 v_name v_job 查询emp的ename和job 并赋值给v_name和v_job 并打印值…decalare…begin…end
6-使用record重写题目5的代码和题目1的代码。
7-使用%rowtype重写题目5的代码和题目1的代码。
8-输入a的值 输入b的值 计算c的值(a+b) declare…begin…exception…end
SQL> declare
2 a int;
3 b int;
4 c number;
5 begin
6 dbms_output.put_line('请输入a的值:');
7 a:= &a;
8 dbms_output.put_line('请输入b的值:');
9 b:=&b;
10 c:=(a+b)/(a-b);
11 dbms_output.put_line(c);
12 exception
13 when zero_divide then
14 dbms_output.put_line('除数不能为零!!!');
15 end;
16 /
9-if 比较字符串大小并输出结果
SQL> declare
2 v_name1 varchar2(50);
3 v_name2 varchar2(50);
4 begin
5 v_name1:='hello';
6 v_name2:='hello,word';
7 if length(v_name1) <= length(v_name2)
8 then
9 dbms_output.put_line('字符串'||v_name1||'的长度小等于'||v_name2||'的长度。');
10 end if;
11 end;
12 /
10-if …elsif…then…比较字符串大小并输出结果
SQL> declare
2 v_name1 varchar2(50);
3 v_name2 varchar2(50);
4 begin
5 v_name1:='hello';
6 v_name2:='hello,word';
7 if length(v_name1) < length(v_name2)
8 then
9 dbms_output.put_line('字符串'||v_name1||'的长度小于'||v_name2||'的长度。');
10 elsif length(v_name1) < length(v_name2)
11 then
12 dbms_output.put_line('字符串'||v_name1||'的长度大于'||v_name2||'的长度。');
13 elsif length(v_name1) = length(v_name2)
14 then
15 dbms_output.put_line('字符串'||v_name1||'的长度等于'||v_name2||'的长度。');
16 end if;
17 end;
18 /
11-if …elsif…then…判断你的年纪是否为90后并输出结果(录入出身年与1990比较)
SQL> declare
2 age int;
3 v_nyear int;
4 v_year int;
5 begin
6
7 dbms_output.put_line('请输入年龄:');
8 age:=&age;
9 select extract(year from sysdate) into v_nyear from dual;
10 v_year:=v_nyear-age;
11 dbms_output.put_line('您的出生年份是:'||v_year);
12 if v_year>= 1990 then
13 dbms_output.put_line('您是90后!');
14 elsif v_year< 1990 then
15 dbms_output.put_line('您不是90后!');
16 end if;
17 end;
18 /
12-loop…exit when…end loop与while…loop…end loop;
区别是什么?
loop…exit when…end loop 先执行后判断;
while…loop…end loop 先判断后执行。
13-分别用
loop…exit when…end loop;
while…loop…end loop;
for…in…loop…end loop;
写代码计算:循环200次时,跳出循环…
SQL> declare
2 sum_i int:=0;
3 i int:=0;
4 begin
5 loop
6 i:=i+1;
7 sum_i:=sum_i+i;
8 exit when i=200;
9 end loop;
10 dbms_output.put_line(sum_i);
11 end;
12 /
SQL> declare
2 sum_i int:=0;
3 i int:=0;
4 begin
5 while i<200 loop
6 i:=i+1;
7 sum_i:=sum_i+i;
8 end loop;
9 dbms_output.put_line(sum_i);
10 end;
11 /
SQL> declare
2 sum_i int:=0;
3 i int:=0;
4 begin
5 for i in 1..200 loop
6 sum_i:=sum_i+i;
7 end loop;
8 dbms_output.put_line(sum_i);
9 end;
10 /
14-case…when.then…else…end case;请用代码说明函数用法.
SQL> declare
2 season int;
3 aboutinfo varchar2(50);
4 begin
5 season:=&season;
6 case season //case 选择器
7 when 1 then
8 aboutinfo:=season||'季度包括1、2、3月份'; //when 子句
9 when 2 then
10 aboutinfo:=season||'季度包括4、5、6月份';
11 when 3 then
12 aboutinfo:=season||'季度包括7、8、9月份';
13 when 4 then
14 aboutinfo:=season||'季度包括10、11、12月份';
15 else
16 aboutinfo:=season||'季度不合法!';
17 end case;
18 dbms_output.put_line(aboutinfo);
19 end;
20 /
PL SQL游标
15-显式游标代码-emp查询。
SQL> declare
2 cursor cur_emp(var_job varchar2:='SALESMAN') is select empno,ename,sal from emp where job=var_job;//创建游标
3 type record_emp is record //申明一个记录变量
4 (
5 var_empno emp.empno%type,
6 var_ename emp.ename%type,
7 var_sal emp.sal%type
8 );
9 emp_row record_emp;
10 begin
11 open cur_emp; //打开游标
12 fetch cur_emp into emp_row; //读取游标中数据
13 while cur_emp%found loop //讲数据存储在记录变量里
14 dbms_output.put_line(emp_row.var_ename||'的编号是:'||emp_row.var_empno||',的工资是:'||emp_row.var_sal);
15 fetch cur_emp into emp_row; //游标指向下一行
16 end loop;
17 close cur_emp; //关闭游标
18 end;
19 /
16-隐式游标代码-工资上调。
begin
update emp set sal=sal*(1+0.2) where job = 'SALESMAN';
if sql%notfound then
dbms_output.put_line('没有员工工资上调');
else
dbms_output.put_line('有'||sql%rowcount||'个员工的工资上调20%');
end if;
end;
PL SQL异常处理
17-系统预定义异常有哪些?列举其中2个的例子代码说明…
// value_error 异常
declare
v_vara varchar2(1);
v_varb varchar2(4):='java';
begin
v_vara:=v_varb;
exception
when value_error then
dbms_output.put_line('赋值错误!');
end;
//zero_divide异常
declare
a number:=10;
b number:=0;
c number;
begin
c:=a/b;
exception
when zero_divide then
dbms_output.put_line('被除数不能为零');
end;
18-用代码解释自定义异常用法…
//自定义text_exp异常
declare
a number:=1;
b number:=2;
test_exp exception;
begin
if a<b then
raise test_exp;
end if;
exception
when test_exp then
dbms_output.put_line('异常');
end;