您的位置:首页 > 数据库 > Oracle

oracle数据库(PL/SQL)

2017-11-10 10:40 169 查看
1.PL/SQL

PL/SQL是一种过程化语言,通过增加编程语言的特点,实现对SQL的拓展

PL/SQL的特点:

支持所有SQL的语法;支持case语句,方便实现循环;通过继承,实现子类具有父类的属性和方法;设置了新的日期类型

PL/SQL的开发环境:

oracle数据库服务器;oracle开发工具

PL/SQL的工作原理:

由PL/SQL引擎接收指令;将指令传递给oracle数据库服务器执行

PL/SQL语句块:

PL/SQL程序是按照块结构进行划分,块是PL/SQL程序的基本单位

declare --declare用于声明变量、游标

v_name varchar2(30) :='Jack';

v_age number :=6;

begin --表示程序的开始

--将用户姓名和年龄插入到club_user表中

insert into club_user values(v_name,v_age);

exception --表示异常

/*当出现异常时的处理*/

when others then

dbms_output.put_line('插入数据失败');

end; --表示程序结束

PL/SQL声明:

使用declare关键字,用于定义变量或者常量

语法:

declare variable_name [constant] type [not null] [:=value];

命名规则:

变量名首字母必须是英文字母,其后可以说字母、数字、$、#或者下划线

变量名长度不超过30个字符

变量名中不能有空格

正确的命名:

v_num flag a123

错误的命名:

-123 $123 a num

流程控制:

1.条件结构:

if-then语句:

if condition then

statements

end if;

if-then-else语句:

if condition then

statements1

else

statements2

end if;

if-then-elseif语句:

if condition then

statements1

elseif condition2 then

statements2

else

statements

end if;

2.case语句:根据variable表达式,选择相应的when子句执行

case variable

when value1 then statements1;

when value2 then statements2;

......

when valuen then statementsn;

[else else_statements;]

end case;

3.loop循环

loop

statements;

end loop;

实例:计数器,当数字是10时,停止计数

set serveroutput on;

declare

count_v number :=1;

begin

loop

if count_v>=10

then exit;

ELSE

count_v:=count_v+1;

end if;

end loop;

dbms_output.put_line(count_v);

end;

4.while-loop循环:类似于while循环

while 条件

loop

statements;

end loop;

实例:计数器,当数字是10时,停止计数

set serveroutput on;

DECLARE

count_v NUMBER :=1;

begin

while count_v<10

loop

count_v:=count_v+1;

END LOOP;

dbms_output.put_line(count_v);

end;

5.for-loop循环:类似于for循环

for loop_count in [reverse] lower_bound..height_bound

loop

statements;

end loop;

loop_count:循环变量

reverse:从大到小开始判断

lower_bound:最小循环次数

height_bound:最大循环次数

实例:计数器,当数字是10时,停止计数

set serveroutput on;

declare

count_v number;

BEGIN

for loop_count in 1..10

loop

count_v:=loop_count;

END LOOP;

dbms_output.put_line(count_v);

end;

2.PL/SQL异常

PL/SQL的预定义异常:

预定义异常
说明
too_many_rows
返回太多记录
case_not_found
在case语句中没有when子句被选择,并且没有else子句
invalid_number
试图将一个非有效的字符串转换成数字
loggin_denied
使用无效的用户名和口令登录oracle
no_data_found
查询语句无返回数据,或者引用了一个被删除的元素,或者引用了一个没有被初始化的元素
timeout_on_resource
oracle在等待资源时发生超时的现象
others
所有异常的总和
实例:在查询多条数时出现异常:

set serveroutput on;

DECLARE id_v NUMBER;

begin

SELECT id into id_v from temp_tab where id>10;

EXCEPTION

when too_many_rows--当执行pl/sql出现异常时

then dbms_output.put_line('查询多条数据异常');

end;

当others和其他自定义异常同时出现时,执行比较具体的那个异常处理部分

set serveroutput on;

DECLARE id_v NUMBER;

begin

SELECT id into id_v from temp_tab where id>10;

EXCEPTION

when too_many_rows--当执行pl/sql出现异常时

then dbms_output.put_line('查询多条数据异常');

when OTHERS

then dbms_output.put_line('出现异常');

end;

PL/SQL中的异常处理:

使用raise关键字引发异常,使用exception关键字处理异常

DECLARE

test_exception EXCEPTION; --声明异常

BEGIN

.......

RAISE test_exception; --抛出异常

...... --发生异常后不会执行这里的代码

EXCEPTION

when test_exception

then

...... --控制被转到异常处理部分,这里的代码被执行

END;

实例:

set serveroutput on;

DECLARE

number_v NUMBER :=10;

test_exception EXCEPTION;--声明异常

BEGIN

case number_v

when 10

then RAISE test_exception;--抛出异常

else

dbms_output.put_line(number_v);

end CASE;

EXCEPTION

when test_exception

then

dbms_output.put_line('抛出异常');

END ;
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: