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的预定义异常:
实例:在查询多条数时出现异常:
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 ;
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 ;
相关文章推荐
- 用PL/SQL连接虚拟机中的oracle数据库
- PL/SQL下连接远程oracle数据库
- PL/SQL实现Oracle数据库任务调度
- 配置PL/SQL DEVELOPER远程访问oracle数据库
- Oracle数据库学习9之PL/SQL控制结构
- PL/SQL远程连接oracle数据库完美教程
- .NET连接Oracle数据库的错误,pl/sql中的myobjects过滤器
- PL/SQL实现Oracle数据库任务调度
- PL/SQL Developer远程连接Oracle数据库
- Oracle数据库的创建以及远程连接(PL/SQL Developer远程连接数据库)
- PL/SQL 连接oracle数据库老报ora-12541:TNS:无监听程序
- PL/SQL Developer连接Oracle数据库(安装配置instantclient,无需安装oracle)
- PL/SQL中编写Oracle数据库分页的存储过程
- PL/SQL Developer连接远程Oracle数据库
- pl/sql developer中如何导出oracle数据库结构? 参考文章一
- 免安装oracle客户端数据库,使用PL/SQL连接服务器oracle数据库
- PL/SQL Developer 连接Oracle数据库详细配置方法
- PL/SQLdevelop登入oracle数据库很慢
- PL/SQL实现Oracle数据库任务调度
- docker安装oracle数据库并用PL/SQL连接