根据一份规范文档,写了一个用于日后项目开发的示例用途的存储过程。
这篇文档对数据库开发的初学者有帮助。严格执行的规范有利于程序代码的阅读和扩展。
规范
变量类型
|
前缀
|
范例
|
说明
|
数值型
|
i_
|
i_variablename
|
用于number
、integer
等数值类型的变量。
|
字符型
|
str_
|
str_variablename
|
用于char
、varchar2
等字符类型的变量。
|
日期型
|
dt_
|
dt_variablename
|
用于date
、timestamp
等日期类型的变量。
|
BLOB
|
blb_
|
blb_blobvariablename
|
专用于BLOB
类型变量的定义。
|
CLOB
|
clb_
|
clb_clobvariablename
|
专用于CLOB
类型变量的定义。
|
LONG
|
lng_
|
lng_longvariablename
|
专用于LONG
类型变量的定义。
|
游标类型
|
tcur_
|
tcur_typename
|
t
表示类型(type
);
cur
表示游标(cursor
)。
|
游标
|
cur_
|
cur_cursorname
|
cur
表示游标(cursor
)
|
自定义记录类型
|
trcd
_
|
trcd_typename
|
t
表示类型(type
);
rcd
表示记录(record
)。
|
自定义记录类型变量
|
vrcd_
|
vrcd_variablename
|
v
表示变量(variable
);
rcd
表示记录(record
)。
|
自定义嵌套表类型
|
tntbl_
|
tntbl_typename
|
t
表示类型(type
);
ntble
表示嵌套表(nested table
)。
|
自定嵌套表类型变量
|
vntbl_
|
vntbl_variablename
|
v
表示变量(variable
);
ntble
表示嵌套表(nested table
)。
|
存储过程示例如下:
create or replace procedure p_rpt_test is
/**********************************************************************************
NAME: p_rpt_test
PURPOSE: 报表数据测试
REVISIONS:
Ver Date Author Description
--------- ---------- ---------------------- ------------------------------------
V1.0 2012-09-12 WangXL 12345 1.创建此存储过程
RETURN: 无返回值
NOTES: 1、使用到不带参数的游标(即cursor)
2、使用到for in loop end loop循环
3、游标打开后,必须关闭。
**********************************************************************************/
/*按照规划,定义number,string,date三种类型变量名称*/
i_id number(8);
str_testname varchar2(30);
dt_createdate date;
/*按照规划,定义cursor变量名称,游标是一个查询结果集,可以传入变量参数,也可以不传。
这里的结果集是test1表的三个字段*/
cursor cur_test1 is
select a.id, a.testname, a.createtime from test1 a;
begin
/* for in loop end loop 循环体 */
for c in cur_test1 loop
-- 该循环体中,游标自动打开关闭,不需要手工打开再关闭。
-- c 是循环内部变量,为了开发方便,所以简单命名为c。
-- c 根据循环,依次读取游标cur_test1的每一行记录。
--如果数据量很大,使用其他的方式取游标记录,如bulk collect into
i_id := c.id; --赋值游标中一行记录的id列值到i_id变量上
str_testname := c.testname || 'xx'; --将游标中一行记录的testname列值加上'xxx'处理后赋值到str_testname变量上
dt_createdate := c.createtime - 2;
insert into test2
(id, testname, createtime)
values
(i_id, str_testname, dt_createdate); --将变量值插入到test2表中
end loop;
commit; --所有记录插入后,一次性提交。
open cur_test1; --打开定义好的游标(cursor)
/*loop end loop循环体*/
loop
fetch cur_test1
into i_id, str_testname, dt_createdate;
--fetch就是取游标中一行记录到三个变量中
exit when cur_test1%notfound; --如果游标已经没有记录了,那么%notfound就是true,从而退出循环;如果还有记录继续下一步
str_testname := str_testname || 'yy'; --将游标中一行记录的testname列值加上'xxx'处理后赋值到str_testname变量上
dt_createdate := dt_createdate + 2;
insert into test2
(id, testname, createtime)
values
(i_id, str_testname, dt_createdate); --将变量值插入到test2表中
end loop;
commit; --所有记录插入后,一次性提交。
close cur_test1; --关闭开头打开的游标
exception
when others then
rollback; --如果上面操作失败,主动使用rollback取消所有的操作。
dbms_output.put_line(sqlerrm);
end;
存储过程展示两种循环体和游标的使用。
分享到:
相关推荐
《PLSQL存储过程教程》深度解析与应用指南 一、PL/SQL简介及重要性 PL/SQL(Procedure Language for SQL)是一种专为Oracle数据库设计的过程化语言,它结合了SQL的强大数据处理能力和传统编程语言的流程控制能力,...
函数是一种特殊的存储过程,它返回一个值。 **6.2 创建过程** 过程是一种没有返回值的存储过程。 **6.3 调用存储过程** 可以通过简单的CALL语句来调用存储过程。 **6.3.1 创建过程** 创建过程时需要指定其签名...
PLSQL Developer的这项功能可能是一个插件或者独立的程序(如plsqlcomment.exe),它通过快捷键或者菜单选项,自动生成符合规范的函数、存储过程和视图的注释模板,帮助开发者快速填写文档。 描述中提到,这个工具...
#### 一、SQL PLUS 基础与操作 **1. 引言与SQL命令** - **SQL命令关键字:** - `ALTER`:用于修改数据库对象。 - `DROP`:用于删除数据库对象。 - `REVOKE`:用于撤销对特定用户的权限。 - `AUDIT`:用于跟踪...
在这个名为"PLSQL.rar_plsql"的压缩包中,包含了两个文件:一个是“PLSQL的使用实验.doc”,很可能是对PLSQL编程的具体实验步骤和案例分析;另一个是“www.pudn.com.txt”,可能是从网站www.pudn.com下载的有关PLSQL...
- 函数与过程类似,但返回一个值。 - 示例:`CREATE OR REPLACE PROCEDURE my_procedure (param1 IN NUMBER, param2 OUT NUMBER) AS ... END;` 3. **游标**: - 游标用于逐行处理查询结果,可以与PLSQL块结合...
函数则类似于存储过程,但它们可以返回一个值。在PL/SQL中,你可以定义自定义函数,用于处理数据或执行特定任务,并在SQL查询中直接使用。 触发器是一种特殊的存储过程,它会在特定的数据库事件(如INSERT、UPDATE...
这些信息存储在一个名为`tnsnames.ora`的配置文件中,该文件通常位于`<ORACLE_HOME>\NETWORK\ADMIN`目录下。 - **配置文件设置方式** 可以通过文本编辑器直接打开并修改,也可以使用Oracle Net Manager GUI工具...
- 示例:存储过程模板、函数模板等。 **3.3 异常处理** - 使用`EXCEPTION`块来捕获并处理异常。 - 示例:`WHEN OTHERS THEN DBMS_OUTPUT.PUT_LINE('An error occurred.');` **3.4 区分故意、不幸、意外的错误** - ...
- **示例**:创建一个分页存储过程,接收参数如当前页码和每页记录数,返回指定范围内的记录。 #### 例外处理 - **概念**:用于捕获和处理运行时可能发生的异常情况,以确保程序的稳定性和健壮性。 - **示例**:...
PLSQL,全称为Procedural Language/Structured Query Language,是Oracle数据库系统中用于操作和管理数据的一种编程语言。它是SQL的扩展,增加了程序化的元素,如循环、条件语句和子程序,使得数据库管理和开发更加...
2. **块结构**:PLSQL程序由一个或多个块构成,包括匿名块、过程、函数、包等。匿名块是不具有名称的PLSQL代码段,可以直接在SQL*Plus中执行。 3. **变量和常量**:PLSQL支持声明各种类型的变量,如 NUMBER、...
PL/SQL Developer提供了一个选项,可以自动将SQL关键词转换为大写。 - **设置方法**:在“工具”>“首选项”>“编辑器”>“关键词大小写”中选择“大写”,这样在编写SQL语句时,所有关键词如SELECT、FROM、WHERE等...
PL/SQL程序的基本单位是块,一个典型的PL/SQL块由三部分组成: - **声明部分 (DECLARATION)**:定义变量、常量、游标等。 - **执行部分 (EXECUTION)**:包含PL/SQL语句,如控制流语句、SQL语句等。 - **异常处理...
- 函数可以返回一个值,通常用于计算或检索数据。 - **存储过程** - 过程可以接收输入参数,执行一系列操作,但不返回值。 #### 第七章:包的创建和应用 - **包的定义** - 包是用来组织和管理存储过程、函数等...
- **规范要求**:为了使SQL语句更加清晰易读,关键字、保留字、逻辑操作符(如OR、IN、AND等)前后应有一个空格。左括号前和右括号后也应有一个空格。 - **示例**: ```sql SELECT A.COL1, A.COL2, B.COL1 FROM ...
首先,我们来看第一个知识点:**存储过程**。存储过程是一种预编译的SQL语句集合,可以接受输入参数、输出结果,并执行一系列操作。在实验中,创建了一个名为`proc_category_static`的存储过程,其目的是计算并输出...
- **块结构**:PL/SQL程序由一个或多个块组成,包括匿名块(直接在SQL*Plus或应用中执行的代码)、过程、函数、包等。 - **数据类型**:包括数值型(NUMBER、BINARY_INTEGER、INTEGER等)、字符型(VARCHAR2、CHAR...
- 函数与过程类似,但函数返回一个值。 ##### §6.4 过程和函数中的异常处理 - **使用系统定义的异常处理**:处理预定义的异常。 - **使用用户定义的异常处理**:处理自定义的异常。 #### 七、创建包和使用包 ####...