不得不会的Oracle数据库知识点(四)

简介: 不得不会的Oracle数据库知识点(四)

一.使用PL/SQL


可用于创建存储过程,触发器,程序包,给SQL语句的执行添加程序逻辑。

支持SQL,在PL/SQL中可以使用:

数据操纵命令

事务控制命令

游标控制

SQL函数和SQL运算符

支持面向对象编程(OOP)

可移植性

更佳的性能,PL/SQL经过编译执行

分为三个部分:声明部分,可执行部分和异常处理部分

[declare
declarations]
begin
executable statements
[exception
handlers]
end;
复制代码

打开输出

set serverout on;
复制代码

二、游标管理


游标类型:隐式游标,显式游标,REF游标

REF游标用于处理运行时才能确定的动态SQL查询的结果

==========隐式游标==========

在PL/SQL中使用DML语句时自动创建隐式游标

隐式游标自动声明、打开和关闭,其名为SQL

隐式游标的属性:

%found                       SQL语句影响实质后返回true

%notfound                 SQL语句没有影响实质后返回true

%rowcount                SQL语句影响的行数

%isopen            游标是否打开,始终为false

示例:

begin
update user_tbl set score=score+5;
if SQL%found then
         dbms_output.put_line('数据被更改: '||SQL%rowcount);
elsif sql%notfound then
         dbms_output.put_line('没有找到数据!');
end if;
if SQL%isopen then
         dbms_output.put_line('Open');
else
         dbms_output.put_line('Close');
end if;
end;
复制代码

==========显式游标==========

在PL/SQL的声明部分定义查询,该查询可以返回多行:

声明游标、打开游标、 从游标中取回数据、关闭游标

声明游标完成两个任务:

给游标命名

将一个查询与游标关联

cursor cursor_name is select statement;
复制代码

打开游标:

open cursor_name;
复制代码

取数据:  

fetch cursor_name into record_list;
复制代码

关闭游标:      

close cursor_name;
复制代码

显式游标的属性:

%found                      执行最后一条fetch语句成功返回行时为true

%notfound                 执行最后一条fetch语句未能返回行时为true

%rowcount                返回到目前为止游标提取的行数

%isopen            游标是否打开

示例:

带参的显式游标

declare
users user_tbl%rowtype;
cursor boys_cur(sexParam varchar2)
is select * from user_tbl where sex=sexParam;
begin
open boys_cur('&sex');
loop
fetch boys_cur into users;
exit when boys_cur%notfound;
dbms_output.put_line(users.user_name||'  '||users.password);
dbms_output.put_line(boys_cur%rowcount);
end loop;
close boys_cur;
end;
复制代码

循环游标

declare
cursor user_cur is select * from user_tbl;
begin
for username in user_cur loop
         dbms_output.put_line(username.user_name||'  '||username.sex);
end loop;
end;
复制代码

REF游标:

REF游标和游标变量用于处理运行时动态执行的SQL查询

创建游标变量的步骤:

a、 声明REF游标类型

b、 声明REF游标类型的变量

声明类型的语法

Type ref_cursor_name is ref cursor [return return_type];
复制代码

打开游标变量的语法

Open cursor_name for select_statement;
复制代码

声明强类型的游标

declare
type ref_cur is ref cursor return user_tbl%rowtype;
users_cur ref_cur;
复制代码

声明弱类型的游标

declare
type ref_cur is ref cursor;
users_cur ref_cur;
复制代码

三、子程序


子程序分为:存储过程和函数,它是命名的PL/SQL块,编译并存储在数据库中。

子程序的各个部分:声明部分,可执行部分,异常处理部分。

过程----执行某些操作

函数----执行操作并返回值

==========存储过程==========

创建过程的语法:

create or replace procedure
proce_name (parameter_list)
is|as
local variable declaration
begin
executable statements
exception
exception_handlers
end proce_name;
复制代码

过程参数的三种模式:

In----用于接收调用的值,默认的参数模式

Out----用于向调用程序返回值

In out----用于接收调用程序的值,并向调用程序返回更新的值

执行过程的语法:

Execute proce_name(parameter_list);
复制代码

Declare
Variable var_list;
Begin
Proce_name(var_list);
End;
复制代码

将过程执行的权限授予其他用户:

Grant execute on proce_name to scott;
Grant execute on proce_name to public;
复制代码

删除存储过程:

Drop procedure proce_name;
复制代码

==========函数==========

创建函数的语法:

Create or replace function
Fun_name (parameter_list)
Return datatype is|as
Local declarations
Begin
Executable statements;
Return result;
Exception
Exce_handlers;
End;
复制代码

函数只能接收in参数,不能接受out或in out参数,形参不能是PL/SQL类型

函数的返回类型也必须是数据库类型

访问函数的方式:

a、 使用PL/SQL块

b、使用SQL语句

Select fun_name(parameter_list) from dual;


作者:zhulin1028

著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

相关文章
|
1月前
|
存储 Oracle 关系型数据库
oracle数据恢复—oracle数据库执行错误truncate命令的数据恢复案例
oracle数据库误执行truncate命令导致数据丢失是一种常见情况。通常情况下,oracle数据库误操作删除数据只需要通过备份恢复数据即可。也会碰到一些特殊情况,例如数据库备份无法使用或者还原报错等。下面和大家分享一例oracle数据库误执行truncate命令导致数据丢失的数据库数据恢复过程。
|
3月前
|
Oracle 安全 关系型数据库
【Oracle】使用Navicat Premium连接Oracle数据库两种方法
以上就是两种使用Navicat Premium连接Oracle数据库的方法介绍,希望对你有所帮助!
656 28
|
3月前
|
SQL Oracle 关系型数据库
【赵渝强老师】Oracle的闪回数据库
Oracle闪回数据库功能类似于“倒带按钮”,可快速将数据库恢复至 earlier 状态,无需还原备份。本文介绍了闪回数据库的使用方法及实战案例:包括设置归档模式、开启闪回功能、记录SCN号、执行误操作后的恢复步骤等。通过具体 SQL 操作演示了如何利用闪回数据库恢复被误删的用户数据。注意,使用此功能前需确保数据库为归档模式。
119 9
|
4月前
|
Oracle 关系型数据库 数据库
【赵渝强老师】Oracle数据库的闪回表
本文介绍了Oracle数据库中的闪回表(Flashback Table)功能,它能够将表的数据快速恢复到特定时间点或系统改变号(SCN),无需备份。文章通过实战示例详细演示了如何使用闪回表恢复数据,包括授权、创建测试表、记录时间与SCN号、删除数据、启用行移动功能、执行闪回操作以及验证恢复结果等步骤。同时,还展示了如何通过触发器禁止插入操作,并在闪回过程中处理触发器的启用问题。文末附有视频讲解,帮助读者更好地理解闪回表的使用方法。
175 10
|
4月前
|
Oracle 关系型数据库 数据库
【赵渝强老师】Oracle数据库的闪回查询
本文介绍了Oracle数据库的闪回查询(Flashback Query)功能及其实际应用。闪回查询通过`AS OF`子句,结合时间戳或SCN号,可查询历史数据状态,帮助分析数据差异。文中通过具体示例演示了如何使用闪回查询:创建测试表、记录当前SCN号、更新数据并提交事务,最后通过闪回查询获取历史数据。附带的视频和代码块详细展示了操作步骤与结果。
143 4
|
4月前
|
Oracle 关系型数据库 数据管理
【赵渝强老师】Oracle数据库的闪回技术
在Oracle数据库操作中,难免会遇到误删表或提交错误事务等问题,可能导致数据丢失甚至数据库停止运行。传统解决方法依赖备份恢复,但需提前准备正确备份。为此,Oracle提供了闪回技术,无需备份即可快速恢复数据。它支持7种类型的操作,如闪回查询、版本查询、表恢复等,能有效应对逻辑损坏和用户错误。闪回技术基于还原(undo)数据管理,启用自动管理后可实现高效恢复。
131 0
|
23天前
|
人工智能 运维 关系型数据库
数据库运维:mysql 数据库迁移方法-mysqldump
本文介绍了MySQL数据库迁移的方法与技巧,重点探讨了数据量大小对迁移方式的影响。对于10GB以下的小型数据库,推荐使用mysqldump进行逻辑导出和source导入;10GB以上可考虑mydumper与myloader工具;100GB以上则建议物理迁移。文中还提供了统计数据库及表空间大小的SQL语句,并讲解了如何使用mysqldump导出存储过程、函数和数据结构。通过结合实际应用场景选择合适的工具与方法,可实现高效的数据迁移。
166 1
|
2月前
|
负载均衡 算法 关系型数据库
大数据大厂之MySQL数据库课程设计:揭秘MySQL集群架构负载均衡核心算法:从理论到Java代码实战,让你的数据库性能飙升!
本文聚焦 MySQL 集群架构中的负载均衡算法,阐述其重要性。详细介绍轮询、加权轮询、最少连接、加权最少连接、随机、源地址哈希等常用算法,分析各自优缺点及适用场景。并提供 Java 语言代码实现示例,助力直观理解。文章结构清晰,语言通俗易懂,对理解和应用负载均衡算法具有实用价值和参考价值。
大数据大厂之MySQL数据库课程设计:揭秘MySQL集群架构负载均衡核心算法:从理论到Java代码实战,让你的数据库性能飙升!
|
4月前
|
关系型数据库 MySQL Java
【YashanDB知识库】原生mysql驱动配置连接崖山数据库
【YashanDB知识库】原生mysql驱动配置连接崖山数据库
【YashanDB知识库】原生mysql驱动配置连接崖山数据库

推荐镜像

更多