`
mikixiyou
  • 浏览: 1102258 次
  • 性别: Icon_minigender_1
  • 来自: 南京
博客专栏
C3c8d188-c0ab-3396-821d-b68331e21226
Oracle管理和开发
浏览量:354175
社区版块
存档分类
最新评论

一个plsql存储过程规范示例

阅读更多

 

根据一份规范文档,写了一个用于日后项目开发的示例用途的存储过程。

 

这篇文档对数据库开发的初学者有帮助。严格执行的规范有利于程序代码的阅读和扩展。

 

规范

变量类型

前缀

范例

说明

数值型

i_

i_variablename

用于numberinteger 等数值类型的变量。

字符型

str_

str_variablename

用于charvarchar2 等字符类型的变量。

日期型

dt_

dt_variablename

用于datetimestamp 等日期类型的变量。

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;

 

存储过程展示两种循环体和游标的使用。

 

1
3
分享到:
评论

相关推荐

    PLSQL存储过程教程

    《PLSQL存储过程教程》深度解析与应用指南 一、PL/SQL简介及重要性 PL/SQL(Procedure Language for SQL)是一种专为Oracle数据库设计的过程化语言,它结合了SQL的强大数据处理能力和传统编程语言的流程控制能力,...

    PLSQL教程-从入门到精通

    函数是一种特殊的存储过程,它返回一个值。 **6.2 创建过程** 过程是一种没有返回值的存储过程。 **6.3 调用存储过程** 可以通过简单的CALL语句来调用存储过程。 **6.3.1 创建过程** 创建过程时需要指定其签名...

    plsqlcomment自动添加注释

    PLSQL Developer的这项功能可能是一个插件或者独立的程序(如plsqlcomment.exe),它通过快捷键或者菜单选项,自动生成符合规范的函数、存储过程和视图的注释模板,帮助开发者快速填写文档。 描述中提到,这个工具...

    Oracle PLSQL 编程手册

    #### 一、SQL PLUS 基础与操作 **1. 引言与SQL命令** - **SQL命令关键字:** - `ALTER`:用于修改数据库对象。 - `DROP`:用于删除数据库对象。 - `REVOKE`:用于撤销对特定用户的权限。 - `AUDIT`:用于跟踪...

    PL_SQL.rar_plsql

    在这个名为"PLSQL.rar_plsql"的压缩包中,包含了两个文件:一个是“PLSQL的使用实验.doc”,很可能是对PLSQL编程的具体实验步骤和案例分析;另一个是“www.pudn.com.txt”,可能是从网站www.pudn.com下载的有关PLSQL...

    PLSQL-中文手冊7

    - 函数与过程类似,但返回一个值。 - 示例:`CREATE OR REPLACE PROCEDURE my_procedure (param1 IN NUMBER, param2 OUT NUMBER) AS ... END;` 3. **游标**: - 游标用于逐行处理查询结果,可以与PLSQL块结合...

    plsql6th.zip

    函数则类似于存储过程,但它们可以返回一个值。在PL/SQL中,你可以定义自定义函数,用于处理数据或执行特定任务,并在SQL查询中直接使用。 触发器是一种特殊的存储过程,它会在特定的数据库事件(如INSERT、UPDATE...

    PLSQL環境設定

    这些信息存储在一个名为`tnsnames.ora`的配置文件中,该文件通常位于`<ORACLE_HOME>\NETWORK\ADMIN`目录下。 - **配置文件设置方式** 可以通过文本编辑器直接打开并修改,也可以使用Oracle Net Manager GUI工具...

    PLSQL最佳实践

    - 示例:存储过程模板、函数模板等。 **3.3 异常处理** - 使用`EXCEPTION`块来捕获并处理异常。 - 示例:`WHEN OTHERS THEN DBMS_OUTPUT.PUT_LINE('An error occurred.');` **3.4 区分故意、不幸、意外的错误** - ...

    学习oracle笔记-PLSQL

    - **示例**:创建一个分页存储过程,接收参数如当前页码和每页记录数,返回指定范围内的记录。 #### 例外处理 - **概念**:用于捕获和处理运行时可能发生的异常情况,以确保程序的稳定性和健壮性。 - **示例**:...

    达内的plsql笔记和代码

    PLSQL,全称为Procedural Language/Structured Query Language,是Oracle数据库系统中用于操作和管理数据的一种编程语言。它是SQL的扩展,增加了程序化的元素,如循环、条件语句和子程序,使得数据库管理和开发更加...

    PLSQL用户手册

    2. **块结构**:PLSQL程序由一个或多个块构成,包括匿名块、过程、函数、包等。匿名块是不具有名称的PLSQL代码段,可以直接在SQL*Plus中执行。 3. **变量和常量**:PLSQL支持声明各种类型的变量,如 NUMBER、...

    PLSQL 快捷键使用技巧

    PL/SQL Developer提供了一个选项,可以自动将SQL关键词转换为大写。 - **设置方法**:在“工具”>“首选项”>“编辑器”>“关键词大小写”中选择“大写”,这样在编写SQL语句时,所有关键词如SELECT、FROM、WHERE等...

    oracle_plsql_编程详解

    PL/SQL程序的基本单位是块,一个典型的PL/SQL块由三部分组成: - **声明部分 (DECLARATION)**:定义变量、常量、游标等。 - **执行部分 (EXECUTION)**:包含PL/SQL语句,如控制流语句、SQL语句等。 - **异常处理...

    PLSQL教材(非常详细)

    - 函数可以返回一个值,通常用于计算或检索数据。 - **存储过程** - 过程可以接收输入参数,执行一系列操作,但不返回值。 #### 第七章:包的创建和应用 - **包的定义** - 包是用来组织和管理存储过程、函数等...

    DBA对Oracle SQL编写规范的总结

    - **规范要求**:为了使SQL语句更加清晰易读,关键字、保留字、逻辑操作符(如OR、IN、AND等)前后应有一个空格。左括号前和右括号后也应有一个空格。 - **示例**: ```sql SELECT A.COL1, A.COL2, B.COL1 FROM ...

    实验6PLSQL程序设计.doc

    首先,我们来看第一个知识点:**存储过程**。存储过程是一种预编译的SQL语句集合,可以接受输入参数、输出结果,并执行一系列操作。在实验中,创建了一个名为`proc_category_static`的存储过程,其目的是计算并输出...

    Oracle_PLSQL.rar_Java plsql_oracle_oracle doc_pl sql_plsql

    - **块结构**:PL/SQL程序由一个或多个块组成,包括匿名块(直接在SQL*Plus或应用中执行的代码)、过程、函数、包等。 - **数据类型**:包括数值型(NUMBER、BINARY_INTEGER、INTEGER等)、字符型(VARCHAR2、CHAR...

    PLSQL_NEW编程讲义

    - 函数与过程类似,但函数返回一个值。 ##### §6.4 过程和函数中的异常处理 - **使用系统定义的异常处理**:处理预定义的异常。 - **使用用户定义的异常处理**:处理自定义的异常。 #### 七、创建包和使用包 ####...

Global site tag (gtag.js) - Google Analytics