Oracle存储过程~基本语法

简介: Oracle存储过程~基本语法

介绍:

   存储过程是一种在数据库中存储和执行一系列SQL语句的功能。它是一种数据库对象,允许管理员和开发人员将复杂的操作封装在一个可重用的单元中。存储过程可以接受输入参数,执行复杂的查询、操作数据以及返回结果。它们可以提高数据库的性能和安全性,因为它们可以将SQL代码编写为单个可执行的对象,从而减少网络流量和数据库服务器的负载。此外,存储过程还可以减少人为错误,因为它们可以强制执行SQL代码的安全性和一致性。

 

变量

变量赋值的方式:

直接赋值语句     :=      比如:    v_name  := '后槽牙'

语句赋值,使用select …into … 赋值:(语法 select 值 into 变量)

在Oracle中,存储过程可以接受变量作为输入或输出参数。变量声明在存储过程的声明块中,使用DECLARE关键字。变量名可以是任何有效的标识符,但不能与数据库中的保留字冲突。

例如,以下是一个简单的存储过程,它接受一个名为“name”的输入参数和一个名为“age”的输出参数:

CREATE OR REPLACE PROCEDURE get_age(name VARCHAR2, age OUT NUMBER)  
IS  
BEGIN  
  SELECT DATEDIFF(YEAR, birthdate, SYSDATE) INTO age FROM people WHERE name = name;  
END;

在这个例子中,我们声明了一个名为“age”的输出参数,它是一个NUMBER类型。在存储过程的主体中,我们使用SELECT INTO语句将查询结果赋值给输出参数。

存储过程可以使用变量来执行各种操作,例如循环、条件语句、函数等。变量还可以用于临时存储数据或结果,以便在存储过程中重复使用。

在Oracle中,普通变量是一种存储过程输入和输出参数的机制。它可以用于存储单个值或多个值,包括标量变量和复合变量。标量变量用于存储单个值,例如 NUMBER、VARCHAR2、PL/SQL BOOLEAN 等等。复合变量通常用于存储记录或对象的多个值,例如 record、rowtype、collection等等。

引用型变量是一种特殊的变量类型,用于存储对另一个数据对象的引用。它通常用于在存储过程中传递大型数据对象,例如CLOB、BLOB、ROWID、UROWID等等。引用型变量需要在声明块中声明为REF CURSOR类型,并且在调用存储过程的代码中,需要将数据对象的引用赋值给它。

记录行变量是一种特殊的复合变量,用于存储对查询结果集的引用。它通常用于在存储过程中处理查询结果集,例如分页、排序、过滤等等。记录行变量需要在声明块中声明为TYPE类型,并且需要在主体中使用OPEN FOR语句来执行查询并返回结果集。在调用存储过程的代码中,需要将查询的参数传递给存储过程,以便存储过程可以处理查询结果集并返回结果。

总结: 普通变量是Oracle存储过程中常用的机制,可以提高存储过程的灵活性和可读性。引用型变量和记录行变量则是用于处理大型数据对象和查询结果集的特殊变量类型,它们可以提高存储过程的效率和可维护性。

 

流程控制

Oracle的流程控制主要包括条件判断和循环。

条件判断使用DECLARE和IF语句来实现例如:

DECLARE  
  v_deptno scott.emp.deptno%TYPE;  
  v_zj NUMBER(4);  
BEGIN  
  SELECT deptno INTO v_deptno FROM scott.emp WHERE empno = &&v_empno;  
  IF v_deptno = 10 THEN  
    v_zj := 100;  
  ELSIF v_deptno = 20 THEN  
    v_zj := 150;  
  ELSIF v_deptno = 30 THEN  
    v_zj := 200;  
  ELSE  
    v_zj := 300;  
  END IF;  
  UPDATE scott.emp SET sal = sal + v_zj WHERE empno = &&v_empno;  
END;

循环使用FOR语句来实现例如:

DECLARE  
  TYPE emp_tab IS TABLE OF scott.emp%ROWTYPE;  
  v_emp_tab emp_tab;  
BEGIN  
  FOR emp IN (SELECT * FROM scott.emp) LOOP  
    v_emp_tab.EXTEND;  
    v_emp_tab(v_emp_tab.COUNT) := emp;  
  END LOOP;  
  FOR i IN 1..v_emp_tab.COUNT LOOP  
    UPDATE scott.emp SET sal = sal + 10 WHERE empno = v_emp_tab(i).empno;  
  END LOOP;  
END;


相关文章
|
2月前
|
存储 SQL Oracle
Oracle系列十五:存储过程
Oracle系列十五:存储过程
|
4月前
|
存储 Java 数据库
JAVAEE框架数据库技术之13_oracle 之PLSQL技术及存储过程和函数(二)
JAVAEE框架数据库技术之13_oracle 之PLSQL技术及存储过程和函数
38 0
|
12天前
|
存储 SQL Oracle
Oracle存储过程与自定义函数的调用:异同与实战场景
【4月更文挑战第19天】Oracle的存储过程与自定义函数各有特色,存储过程用于封装复杂SQL操作,常在批量处理和数据维护中使用,通过CALL或EXECUTE调用;而自定义函数则用于简单计算和查询,返回单一值,可直接在SQL语句中调用。了解两者异同,如返回值方式、调用方式和应用场景,能提升数据库管理效率。实战场景包括:使用存储过程定期清理过期数据,用自定义函数在查询中动态计算字段值。
|
4月前
|
存储 SQL Java
JAVAEE框架数据库技术之13_oracle 之PLSQL技术及存储过程和函数(一)
JAVAEE框架数据库技术之13_oracle 之PLSQL技术及存储过程和函数
35 0
|
5月前
|
存储 SQL Oracle
|
27天前
|
存储 SQL 关系型数据库
轻松入门MySQL:加速进销存!利用MySQL存储过程轻松优化每日销售统计(15)
轻松入门MySQL:加速进销存!利用MySQL存储过程轻松优化每日销售统计(15)
|
2月前
|
存储 关系型数据库 MySQL
Mysql基础第二十六天,使用存储过程
Mysql基础第二十六天,使用存储过程
28 0
Mysql基础第二十六天,使用存储过程
|
2月前
|
存储 SQL 关系型数据库
【MySQL 数据库】9、存储过程
【MySQL 数据库】9、存储过程
205 0
|
4月前
|
存储 关系型数据库 MySQL
MySQL-调用存储过程
MySQL-调用存储过程
101 2
|
4月前
|
存储 关系型数据库 MySQL
MySQL 中创建存储过程
MySQL 中创建存储过程
24 1

推荐镜像

更多