`
dr2tr
  • 浏览: 142284 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

Oracle Procedure (PL/SQL) 实践归纳

阅读更多

基本格式:

例:

create or replace procedure validateUser(USERNAME in VARCHAR2, USERPASSWORD in VARCHAR2, USERTYPE OUT VARCHAR2, VALID OUT CHAR) //头声明,参数以“参数名 in/out 类型”格式声明<o:p></o:p>

 is //过程开始

v_temp number;
//变量声明,格式为“变量名 类型”,“;”结尾

begin //
过程体开始
  select count(
1) INTO v_temp from MANAGER //一种赋值的方式是用select into的形式
  where ma_name=USERNAME and ma_password=USERPASSWORD;
//写完一个语句用“;”结尾
 
  if(v_temp=
0) then //这里是“if-then-else-end if”的格式
  usertype:='not legal user'; //直接赋值
  valid:=
'0';
  else
  select ma_type into usertype from manager
  where ma_name=USERNAME and ma_password=USERPASSWORD;
  valid:=
'1';
 
  end if; 
 
end ;
//过程体结束<o:p></o:p>

<o:p> </o:p>

<o:p> </o:p>

           

为适应select * 的情况,在变量声明时,可以使用variable_name tbl_name%rowtype;这样的形式,意思相似于variable_name为由tbl_name中各个column名为属性构成的struct.

<o:p> </o:p>

<o:p> </o:p>

%的奇特用途一:

Oracle Tutorial中有这样一段话:

Instead of specifying a data type, one can also refer to the data type of a table column (so-called anchored declaration). For example, EMP.Empno%TYPE refers to the data type of the column Empno in the relation EMP. Instead of a single variable, a record can be declared that can store a complete tuple from a given table (or query result). For example, the data type DEPT%ROWTYPE specifies a record suitable to store all attribute values of a complete row from the table DEPT. Such records are typically used in combination with a cursor. A field in a record can be accessed using <record name>.<column name>, for example, DEPT.Deptno.<o:p></o:p>

简单说来就是在声明变量时,不只可以用Oracle的类型名定义,还可以用表中的字段相应类型定义。比如:<o:p></o:p>

v_name tblName.colName%Type; 这一句的意思就是将v_name定义成表tblNamecolName列的类型;而它后面的%Type是说明这种用法的固定写法。<o:p></o:p>

另外一种是在变量声明时,可以使用:

variable_name tbl_name%rowtype;<o:p></o:p>

这样的形式,意思相似于variable_name是一个由tbl_name中各个column名为属性构成的struct. (比如为适应select *  into variable_name的情况)。其中%rowtype是这种用法的固定写法。而要调用这个struct的属性,则直接以variable_name.col_name就可以了(这个与一般编程语言一样)。

<o:p> </o:p>

<o:p> </o:p>

<o:p> </o:p>

<o:p> </o:p>

有关于Exception

Oracle Procedure里的Excpetion部分很像Java里的catch块,即实现了出现异常后的处理。例如:

exception
when NO_DATA_FOUND then
//when而不是if
o_dataExist:=
0;<o:p></o:p>

格式“when – then”表示在某种异常的情况下应该进行的操作。 When后面的异常情况见表:

Oracle Exception Name<o:p></o:p>

Oracle Error<o:p></o:p>

Explanation<o:p></o:p>

DUP_VAL_ON_INDEX<o:p></o:p>

ORA-00001<o:p></o:p>

You tried to execute an INSERT or UPDATE statement that has created a duplicate value in a field restricted by a unique index.<o:p></o:p>

TIMEOUT_ON_RESOURCE<o:p></o:p>

ORA-00051<o:p></o:p>

You were waiting for a resource and you timed out.<o:p></o:p>

TRANSACTION_BACKED_OUT<o:p></o:p>

ORA-00061<o:p></o:p>

The remote portion of a transaction has rolled back.<o:p></o:p>

INVALID_CURSOR<o:p></o:p>

ORA-01001<o:p></o:p>

You tried to reference a cursor that does not yet exist. This may have happened because you've executed a FETCH cursor or CLOSE cursor before OPENing the cursor.<o:p></o:p>

NOT_LOGGED_ON<o:p></o:p>

ORA-01012<o:p></o:p>

You tried to execute a call to Oracle before logging in.<o:p></o:p>

LOGIN_DENIED<o:p></o:p>

ORA-01017<o:p></o:p>

You tried to log into Oracle with an invalid username/password combination.<o:p></o:p>

NO_DATA_FOUND<o:p></o:p>

ORA-01403<o:p></o:p>

You tried one of the following: <o:p></o:p>

1.       You executed a SELECT INTO statement and no rows were returned. <o:p></o:p>

2.       You referenced an uninitialized row in a table. <o:p></o:p>

3.       You read past the end of file with the UTL_FILE package. <o:p></o:p>

TOO_MANY_ROWS<o:p></o:p>

ORA-01422<o:p></o:p>

You tried to execute a SELECT INTO statement and more than one row was returned.<o:p></o:p>

ZERO_DIVIDE<o:p></o:p>

ORA-01476<o:p></o:p>

You tried to divide a number by zero.<o:p></o:p>

INVALID_NUMBER<o:p></o:p>

ORA-01722<o:p></o:p>

You tried to execute an SQL statement that tried to convert a string to a number, but it was unsuccessful.<o:p></o:p>

STORAGE_ERROR<o:p></o:p>

ORA-06500<o:p></o:p>

You ran out of memory or memory was corrupted.<o:p></o:p>

PROGRAM_ERROR<o:p></o:p>

ORA-06501<o:p></o:p>

This is a generic "Contact Oracle support" message because an internal problem was encountered.<o:p></o:p>

VALUE_ERROR<o:p></o:p>

ORA-06502<o:p></o:p>

You tried to perform an operation and there was an error on a conversion, truncation, or invalid constraining of numeric or character data.<o:p></o:p>

CURSOR_ALREADY_OPEN<o:p></o:p>

ORA-06511<o:p></o:p>

You tried to open a cursor that is already open.<o:p></o:p>

除了上面所示的,还有其他的Exception可以用when others来捕获。

<o:p> </o:p>

<o:p> </o:p>

<o:p> </o:p>

 
分享到:
评论

相关推荐

    oracle 9i pl/sql程序设计笔记

    ### Oracle 9i PL/SQL程序设计笔记精要 #### PL/SQL基础知识概览 **标题与描述**:本文档围绕“Oracle 9i PL/SQL程序设计笔记”这一核心主题,深入探讨了PL/SQL语言的基础知识及其在Oracle 9i数据库环境中的应用。...

    Oracle PL/SQL实战(待续)

    Oracle PL/SQL是一种强大的编程语言,它结合了SQL的数据处理能力与PL的程序设计...通过实践和学习"Oracle PL/SQL实战(待续)"的相关内容,我们可以提升在Oracle环境中解决问题的能力,更好地管理和优化数据库系统。

    Oracle PL/SQL实例精解 数据库建立代码

    通过学习和实践这些实例,你可以更深入地理解Oracle PL/SQL如何在实际项目中应用,提升数据库管理和开发的能力。 总结起来,"Oracle PL/SQL实例精解 数据库建立代码"涵盖了数据库设计、对象创建、索引优化以及数据...

    Oracle PL/SQL学习官方教材

    Oracle PL/SQL是一种强大的编程语言,它将SQL与过程编程语言的特性相结合,为数据库开发提供了丰富的功能。在Oracle数据库环境中,PL/SQL是开发高效、可靠和可维护的数据库应用程序的关键工具。以下是对"Oracle PL/...

    Oracle PL/SQL专家指南-高级PL/SQL解决方案的设计与开发

    《Oracle PL/SQL专家指南-高级PL/SQL解决方案的设计与开发》是一本深入探讨Oracle数据库中的PL/SQL编程的专业书籍。PL/SQL是Oracle数据库特有的编程语言,它结合了SQL的查询能力与过程式编程语言的功能,使得数据库...

    oracle_oracle_oraclepl/sql_

    Oracle PL/SQL是一种强大的编程语言,它结合了SQL(结构化查询语言)的数据库操作能力和过程性编程语言的控制结构。在"Oracle PL/SQL"这本书中,作者深入浅出地探讨了这一语言的核心概念和实用技巧,尤其适合法语...

    Oracle PL/SQL实例编程(PL/SQL经典书籍)

    3. **控制结构**:PL/PROCEDURE和PL/FUNCTION是PL/SQL的基本程序单元,前者不返回值,后者可以返回一个值。流程控制结构有IF-THEN-ELSIF-ELSE、CASE、FOR循环、WHILE循环和GOTO。 4. **SQL操作**:PL/SQL可以直接...

    ORACLE PL/SQL 程序设计(第五版)

    通过学习《ORACLE PL/SQL 程序设计(第五版)》并实践"OPP5.WEB.CODE"中的例子,读者可以全面掌握PL/SQL编程,并能构建复杂的Oracle数据库应用程序。这本书对于数据库管理员、开发者以及对Oracle数据库感兴趣的任何...

    Oracle2BPL-SQL.rar_oracle_pl/sql

    Oracle2BPL-SQL.rar_oracle_pl/sql这个压缩包文件可能包含了关于Oracle PL/SQL的基础教程资料,其中的Oracle2BPL-SQL.pdf可能是详细的讲解文本。 Oracle PL/SQL由三部分组成:Procedural Language(过程语言)、...

    ORACLE8 PLSQL程序设计_sql_code.zip_oracle pl/sql_pl sql code_pl/sql_

    Oracle PL/SQL是一种强大的编程语言,它将关系数据库的强大功能与高级编程语法相结合,用于在Oracle数据库环境中构建复杂的业务逻辑和应用程序。Oracle8是PL/SQL的一个早期版本,尽管现在可能已经更新到了更高版本,...

    Introduction to Oracle9i PL/SQL课件

    3. **PL/SQL块**: PL/SQL通过块(Block)的形式来组织代码,包括匿名块(standalone block)、过程(Procedure)、函数(Function)、包(Package)等。这些块可以独立执行,也可以作为更大的程序结构的一部分。 4....

    oracle pl sql 实例精解 源代码

    总的来说,这个资料集提供了一套全面的学习Oracle PL/SQL的途径,从基础概念到实际应用,通过实例演示和动手实践,帮助读者建立起坚实的基础,提升在Oracle数据库环境中解决问题的能力。无论你是初学者还是有经验的...

    12oracle的PL/SQL编程-函数.包.触发器 PPT

    Oracle的PL/SQL编程是数据库开发中的核心技能之一,它扩展了SQL的功能,提供了更强大的逻辑处理能力。本文将深入探讨PL/SQL中的三个关键概念:函数、包和触发器,以及它们在Oracle数据库系统中的应用。 ### 1. 函数...

    Oracle9i PL/SQL程序设计 code部分

    2. **过程与函数**:PL/SQL支持过程(PROCEDURE)和函数(FUNCTION)的创建,它们可以接受参数、返回值,并且可以被其他PL/SQL代码或者SQL语句调用,增强了代码的复用性。 3. **游标**:游标是处理单行结果集的机制...

    《Oracle9i PL/SQL Programming》源代码

    《Oracle9i PL/SQL Programming》源代码是一个包含大量示例和练习的资源包,旨在帮助用户深入理解和熟练掌握Oracle数据库中的PL/SQL编程语言。虽然这个资源是针对Oracle9i版本编写的,但其核心概念和语法在后续的...

    PL/SQL語法大全

    Oracle PL/SQL是一种强大的编程语言,它扩展了标准的SQL,为数据库开发人员和DBA提供了更高级的功能和控制。PL/SQL已经被Oracle公司集成到其...在实践中,PL/SQL是构建高效、稳定和可维护的Oracle解决方案的关键工具。

    pl/sql学习笔记

    PL/SQL(Procedural Language/Structured Query Language)是Oracle数据库中的过程式编程语言,它结合了SQL查询语句和传统的过程式编程元素,使得在数据库管理中进行复杂逻辑处理成为可能。以下是对PL/SQL的学习笔记...

    精通oracle10g PL/SQL编程

    本书《精通Oracle10g PL/SQL编程》为读者提供了一个系统性的学习路径,从基础知识到高级应用,从具体技巧到最佳实践,涵盖了PL/SQL编程的方方面面。通过本书的学习,读者将能够有效地提高Oracle数据库编程的效率和...

    PL/SQL 详解

    PL/SQL (Procedure Language / Structured Query Language) 是Oracle为SQL语言添加的过程化特性的一种编程语言。它是SQL的一个扩展,用于构建复杂的数据库应用程序。自Oracle 6版本开始,PL/SQL作为Oracle RDBMS的...

    oracle实验五 PL/SQL编程

    ### Oracle 实验五 PL/SQL编程 #### 实验目的 本次实验旨在使学习者深入了解PL/SQL编程的基础知识与实际应用。具体目标包括: 1. **掌握PL/SQL的数据类型和基本语法**:理解PL/SQL中不同数据类型的定义与使用方法...

Global site tag (gtag.js) - Google Analytics