declare --声明变量 -- 格式一:变量名 变量类型; -- 格式二:变量名 变量类型 := 初始值; -- 格式三:变量名 变量类型 := &文本框名; -- 格式四:变量名 表名.字段名%type; -- 格式五:变量名 表名%rowtype; vnum number; vage number := 28; vabc number := &abc;--输入一个数值,从一个文本框输入 vsal emp.sal%type; --引用型的变量,代表emp.sal的类型 vrow emp%rowtype; --记录型的变量,代表emp一行的类型 begin --业务逻辑 dbms_output.put_line(vnum); --输出一个未赋值的变量 dbms_output.put_line(vage); --输出一个已赋值的变量 dbms_output.put_line(vabc); --输出一个文本框输入的变量 select sal into vsal from emp where empno = 7654; --将查询到的sal内容存入vsal并输出 dbms_output.put_line(vsal); select * into vrow from emp where empno = 7654; --将查询到的一行内容存入vrow并输出 dbms_output.put_line(vrow.sal); dbms_output.put_line(123); --输出一个整数 dbms_output.put_line(123.456); --输出一个小数 dbms_output.put_line('Hello,World'); --输出一个字符串 dbms_output.put_line('Hello'||',World'); --输出一个拼接的字符串,||拼接符Oracle特有 dbms_output.put_line(concat('Hello',',World')); --输出一个拼接的字符串,concat函数比较通用 end;
2.3、if判断
语法
1 2 3 4 5 6 7
if 条件1 then
elsif 条件2 then
else
endif;
示例
1 2 3 4 5 6 7 8 9 10 11 12 13
declare age number := &age; begin if age < 18then dbms_output.put_line('小屁孩'); elsif age >= 18 and age <= 24 then dbms_output.put_line('年轻人'); elsif age > 24 and age < 40 then dbms_output.put_line('老司机'); else dbms_output.put_line('老年人'); endif; end;
2.4、while循环
语法
1 2 3
while 条件 loop
endloop;
示例
1 2 3 4 5 6 7 8 9
--输出1~10 declare i number := 1; begin while i <= 10loop dbms_output.put_line(i); i := i + 1; endloop; end;
2.5、for循环
语法
1 2 3
for 变量 in [reverse] 起始值..结束值 loop
endloop;
示例
1 2 3 4 5 6 7 8
--输出1~10 declare
begin for i inreverse1 .. 10loop dbms_output.put_line(i); endloop; end;
2.6、loop循环
语法
1 2 3 4 5
loop
exit when 条件
endloop;
示例
1 2 3 4 5 6 7 8 9 10
--输出1~10 declare i number := 1; begin loop exitwhen i > 10; dbms_output.put_line(i); i := i + 1; endloop; end;
2.7、意外
一、含义
意外是程序运行的过程发生的异常,相当于是Java中的异常
二、语法
1 2 3 4 5 6 7 8 9 10 11 12 13
declare --声明变量 begin --业务逻辑 exception --处理异常 when 异常1then ... when 异常2then ... when others then ...处理其它异常 end;
三、分类
系统异常
zero_divide :除数为零异常
value_error :类型转换异常
no_data_found : 没有找到数据
too_many_rows : 查询出多行记录,但是赋值给了%rowtype一行数据变量
自定义异常
1 2 3 4 5 6 7 8 9 10 11 12 13 14
declare --声明变量 异常名称 exception; begin --业务逻辑 if 触发条件 then raise 异常名称; --抛出自定义的异常 exception --处理异常 when 异常名称 then dbms_output.put_line('输出了自定义异常'); when others then dbms_output.put_line('输出了其它的异常'); end;
vi number; vrow emp%rowtype; begin --以下四行对应四个异常,测试请依次放开 vi := 8/0; --vi := 'aaa'; --select * into vrow from emp where empno = 1234567; --select * into vrow from emp; exception when zero_divide then dbms_output.put_line('发生除数为零异常'); when value_error then dbms_output.put_line('发生类型转换异常'); when no_data_found then dbms_output.put_line('没有找到数据异常'); when too_many_rows then dbms_output.put_line('查询出多行记录,但是赋值给了%rowtype一行数据变量'); when others then dbms_output.put_line('发生了其它的异常' || sqlerrm); end;
2、抛出系统异常
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
--查询指定编号的员工,如果没有找到,则抛出系统异常 declare --1.声明一个变量 %rowtype vrow emp%rowtype; begin --查询员工信息,保存起来 select * into vrow from emp where empno = 8000; --判断是否触发异常的条件 if vrow.sal is null then --抛出系统异常 raise_application_error(-20001,'员工工资为空'); endif; exception when others then dbms_output.put_line('输出了其它的异常' || sqlerrm); end;
3、抛出自定义异常
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
--查询指定编号的员工,如果没有找到,则抛出自定义异常 declare --1.声明一个变量 %rowtype vrow emp%rowtype; --2.声明一个自定义的异常 no_emp exception; begin --查询员工信息,保存起来 select * into vrow from emp where empno = 8000; --判断是否触发异常的条件 if vrow.sal is null then raise no_emp; --抛出自定义的异常 endif; exception when no_emp then dbms_output.put_line('输出了自定义异常'); when others then dbms_output.put_line('输出了其它的异常' || sqlerrm); end;
3、索引
一、含义
索引相当于是一本书的目录,能够提高我们的查询效率
二、语法
1、创建索引
1
create [UNIQUE]|[BITMAP] index 索引名 on 表名(列名1,列名2,...);