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;


相关文章
|
3月前
|
SQL 存储 Oracle
一篇文章带你学会 Oracle 存储过程的基本介绍和高阶用法(上)
一篇文章带你学会 Oracle 存储过程的基本介绍和高阶用法
|
3月前
|
DataWorks Oracle 关系型数据库
DataWorks操作报错合集之尝试从Oracle数据库同步数据到TDSQL的PG版本,并遇到了与RAW字段相关的语法错误,该怎么处理
DataWorks是阿里云提供的一站式大数据开发与治理平台,支持数据集成、数据开发、数据服务、数据质量管理、数据安全管理等全流程数据处理。在使用DataWorks过程中,可能会遇到各种操作报错。以下是一些常见的报错情况及其可能的原因和解决方法。
62 0
|
2月前
|
存储 机器学习/深度学习 SQL
SQLSERVER存储过程语法详解
SQLSERVER存储过程语法详解
62 0
|
2月前
|
存储 SQL 关系型数据库
MySQL数据库——存储过程-介绍以及基本语法(特点、创建、调用、查看、删除、示例)
MySQL数据库——存储过程-介绍以及基本语法(特点、创建、调用、查看、删除、示例)
46 0
|
2月前
|
存储 SQL Oracle
oracle 存储过程导出sql语句 导出为文件
oracle 存储过程导出sql语句 导出为文件
146 0
|
3月前
|
SQL 存储 Oracle
一篇文章带你学会 Oracle 存储过程的基本介绍和高阶用法(下)
一篇文章带你学会 Oracle 存储过程的基本介绍和高阶用法
|
3月前
|
存储 SQL Oracle
Oracle存储过程与自定义函数的调用:异同与实战场景
【4月更文挑战第19天】Oracle的存储过程与自定义函数各有特色,存储过程用于封装复杂SQL操作,常在批量处理和数据维护中使用,通过CALL或EXECUTE调用;而自定义函数则用于简单计算和查询,返回单一值,可直接在SQL语句中调用。了解两者异同,如返回值方式、调用方式和应用场景,能提升数据库管理效率。实战场景包括:使用存储过程定期清理过期数据,用自定义函数在查询中动态计算字段值。
|
SQL 存储 关系型数据库
oracle 执行存储过程 ora00131
    今天一开发同事反应新建的测试用户无法执行存储过程,使用plsq远程连接执行存储过程报错如下:     报错信息是:ORA-0131:Insufficient privileges,就是用户没有存储过程的调试执行权限:DEBUG CONNECT SESSION...
1143 0
|
4天前
|
存储 自然语言处理 Oracle
Oracle数据库字符集概述及修改方式
【8月更文挑战第15天】Oracle 数据库字符集定义了数据的编码方案,决定可存储的字符类型及其表示方式。主要作用包括数据存储、检索及跨系统传输时的正确表示。常见字符集如 AL32UTF8 支持多语言,而 WE8MSWIN1252 主用于西欧语言。修改字符集风险高,可能导致数据问题,需事先备份并评估兼容性。可通过 ALTER DATABASE 语句直接修改或采用导出-导入数据的方式进行。完成后应验证数据完整性。此操作复杂,须谨慎处理。
|
11天前
|
SQL Oracle 关系型数据库
"揭秘!一键解锁Oracle日志清理魔法,让海量归档日志无处遁形,守护数据库健康,告别磁盘空间告急噩梦!"
【8月更文挑战第9天】随着Oracle数据库在企业应用中的普及,归档日志管理对保持数据库健康至关重要。归档日志记录所有更改,对数据恢复极为重要,但也可能迅速占用大量磁盘空间影响性能。利用Oracle提供的RMAN工具,可通过编写Shell脚本来自动清理归档日志。脚本包括设置环境变量、连接数据库、检查和删除指定时间前的日志,并记录执行情况。通过Cron作业定时运行脚本,可有效管理日志文件,确保数据库稳定运行。
35 7

推荐镜像

更多