嗯,好久不写存储过程了,最近有一个业务用数据库的存储过程来实现比较妥当,于是再次接触了一下,下面是一些记录,以便以后翻查;
1、如何定义一个存储过程:
下面是一个简单的存储过程定义,实现了将“hello”打印出来
CREATE OR REPLACE
PROCEDURE P_TEST(P_START_TIME TEST.CREATE_TIME%TYPE, P_END_TIME
TEST.CREATE_TIME%TYPE) IS
//这里定义所有在正文中会使用到的局部变量
BEGIN
//这里是存储过程正文
DBMS_OUTPUT.PUT_LINE('HELLO');
END P_TEST;
说明:P_START_TIME TEST.CREATE_TIME%TYPE 代表该形参类型与TEST表的CREATE_TIME字段一致;
2、如何在sql窗口调用一个名为P_TEST的存储过程?
格式如下:
DECLARE
BEGIN
P_TEST(SYSDATE,SYSDATE);
END;
3、如何使用循环?
LOOP
//这里是循环中的内容
END LOOP;
4、如何在循环中continue?
LOOP
if 条件满足 then
goto main_loop;
end if;
<<main_loop>>
null;
END LOOP;
5、如何使用游标?
一般使用游标分这样几个步骤:定义游标、打开游标、获取当前游标数据并让游标指向下一条数据、关闭游标;
定义游标示例:
CURSOR myCur is
select a, b, c
from tbl_test;
打开游标示例:
if myCur%isopen = false then
open myCur;
end if;
获取当前数据并让游标指向下一跳数据:
loop
fetch myCur into tmp_a,tmp_b,tmp_c;
exit when myCur%notfound;
dbms_output.put_line(tmp_a || ',' || tmp_b || ',' ||
tmp_c);
end loop;
关闭游标示例:
close myCur;
一个完整的例子:
CREATE OR REPLACE
PROCEDURE P_TEST IS
CURSOR myCur is
select a, b, c from tbl_test;
tmp_a varchar(32);
tmp_b varchar(32);
tmp_c varchar(32);
BEGIN
if myCur%isopen = false then
open myCur;
end if;
loop
fetch myCur
into tmp_a, tmp_b, tmp_c;
exit when myCur%notfound;
dbms_output.put_line(tmp_a || ',' ||
tmp_b || ',' || tmp_c);
end loop;
close myCur;
END P_TEST;
6、使用结构体与游标结合进行使用
在上面的应用中,我们可以把a,b,c三个值放到一个结构体中,以方便使用;
结构体定义示例:
type SourceData is record(
a tbl_test.a%type,
b tbl_test.b%type,
c tbl_test.c%type);
对循环的使用,我们也可以通过使用for-in语句,下面的完整示例:
CREATE OR REPLACE
PROCEDURE P_TEST IS
CURSOR myCur is
select a, b, c from tbl_test;
type SourceData is record(
a tbl_test.a%type,
b tbl_test.b%type,
c tbl_test.c%type);
srcData SourceData;
BEGIN
for srcData in myCur loop
dbms_output.put_line(srcData.a || ','
|| srcData.b || ',' ||
srcData.c);
end loop;
END P_TEST;
7、如何获取当前插入数据的id?
insert into
tbl_test(id,name) values(seq_test.nextval,'myName');
select
seq_test.currval into tmpId from dual;
8、在存储过程处理过程中,遇到异常一般如何处理?
下面是一个存储过程正文中的常用格式:
CREATE OR REPLACE
PROCEDURE P_TEST(P_START_TIME TEST.CREATE_TIME%TYPE, P_END_TIME
TEST.CREATE_TIME%TYPE) IS
BEGIN
//这里做一些数据库操作
COMMIT;
EXCEPTION
//遇到异常,则回滚
WHEN OTHERS THEN
ROLLBACK;
RAISE;
END P_TEST;
9、常用函数
打印:
DBMS_OUTPUT.PUT_LINE('hello' || ' ' || 'world');
字符串转日期:
to_date('2011-01-10
12:13:14','YYYY-MM-DD HH24:MI:SS')
日期转字符串:
to_char(sysdate,'YYYY-MM-DD
HH24:MI:SS')
去掉前后空格:
trim('
str ');
分享到:
相关推荐
Oracle PL/SQL存储过程是Oracle数据库中的一种重要编程机制,用于封装复杂的数据库操作逻辑,提高数据库性能,并且便于代码管理和重用。以下是对Oracle存储过程的详细解释。 **Oracle存储过程基础知识** Oracle存储...
下面我们将深入探讨Oracle PL/SQL存储过程的基础知识、基本语法以及一些常见问题。 **Oracle 存储过程基础知识** 1. **定义与创建**:存储过程由一系列的PL/SQL语句组成,包括变量声明、控制结构、SQL语句等,通过...
Oracle存储过程是数据库管理系统Oracle中的一个重要特性,它允许开发者编写一系列的SQL和PL/SQL语句,形成一个可重用的程序单元。这样的程序单元可以在需要的时候被调用执行,提高了代码的复用性和数据库的性能。...
Oracle 存储过程是数据库管理系统Oracle中的一个重要特性,它允许开发者编写一组SQL语句和PL/SQL代码,形成一个可重复使用的程序单元。存储过程可以提高数据库应用的性能,减少网络流量,并且提供更好的安全性。以下...
Oracle存储过程是SQL与PL/SQL结合的强大功能,用于封装复杂的数据操作逻辑于数据库内部,从而实现高效的事务处理和数据管理。以下是对Oracle存储过程的一些关键知识点的深入解析: #### Oracle存储过程基本语法 ...
Oracle存储过程是Oracle数据库中一种用于封装SQL语句、PL/SQL语句或Java语句的程序单元,它可以包含一系列操作,使得商业规则和业务逻辑可以从应用程序中独立出来,集中存储在数据库中。存储过程的好处包括代码的...
- 存储过程由PL/SQL(Procedural Language/SQL)编写,它结合了SQL的查询能力与编程语言的控制结构。 - 存储过程可以接受参数,这些参数可以在调用时传递值进去,使得过程具有灵活性。 - 存储过程可以包含数据...
### Oracle PL/SQL 存储过程详解 #### Oracle存储过程基础知识 存储过程是数据库中预编译好的一段SQL或PL/SQL代码,它可以接受输入参数并返回结果,从而实现复杂的功能逻辑。存储过程的主要优势包括提高性能(因为...
存储过程可以包含DML(数据操纵语言),DDL(数据定义语言)以及PL/SQL控制结构,如条件判断和循环。 2. **存储过程的基本语法**:存储过程的创建通常使用`CREATE PROCEDURE`语句,定义参数、输入输出类型和过程体...
- **定义**: 存储过程是在数据库中预编译并存储的一段SQL或PL/SQL代码块,它可以包含复杂的逻辑处理,用于实现特定的功能。存储过程提高了代码的重用性、安全性以及执行效率。 - **应用场景**: 通常用于实现复杂的...
Oracle存储过程是数据库管理系统Oracle中的一个重要特性,它允许开发者编写一系列的SQL语句和PL/SQL块,以完成特定的任务。这些预编译的代码集合可以提高数据库操作的效率,减少网络流量,并提供更好的安全性和模块...
存储过程是数据库中预编译的一系列SQL和PL/SQL语句的集合,它提供了执行复杂操作的能力,如事务处理、数据处理和错误处理。Oracle存储过程的使用不仅提高了代码的重用性和效率,还增强了数据的安全性,因为它们可以...
其中,`CREATE OR REPLACE`用于创建或替换已存在的存储过程,`PROCEDURE`定义过程名,`AS`后是过程体,包含了执行的SQL语句和PL/SQL块。 3. **Oracle 存储过程的若干问题备忘** - 数据表别名不能使用`AS`关键字,...
- **组成元素**: 存储过程可以包含SQL语句、PL/SQL代码块以及Java代码等多种编程语言元素。 - **优势**: 将业务逻辑放置在数据库内部可以提高应用的安全性和响应速度,同时减少网络传输开销。 **2. 创建存储过程...
8.6.1 使用存储过程 8.6.2 使用抽象层 8.6.3 处理敏感数据 8.6.4 避免明显的对象名 8.6.5 创建数据库Honeypot 8.6.6 附加的安全开发资源 8.7 本章小结 8.8 快速解决方案 8.9 常见问题解答...
8.6.1 使用存储过程 289 8.6.2 使用抽象层 290 8.6.3 处理敏感数据 290 8.6.4 避免明显的对象名 291 8.6.5 创建数据库Honeypot 292 8.6.6 附加的安全开发资源 293 8.7 本章小结 293 8.8 快速解决方案 294 8.9 常见...
- **PL/SQL**:Oracle扩展的编程语言,用于编写存储过程、函数、触发器等。 3. **性能优化** - **索引(Indexes)**:加快查询速度的数据结构,有B树、 bitmap、R树等多种类型。 - **分区(Partitioning)**:将...
存储过程是一组预先编译的SQL语句,可以封装在一起执行,提高了代码的复用性和效率。 13. **触发器(Trigger)** 触发器是一种在特定数据库事件(如INSERT、UPDATE或DELETE)发生时自动执行的数据库对象。它们...