--例1
declare
v_name varchar2(10);
begin
select user_name into v_name from tb_rd_user_info where user_name='ywj12';
dbms_output.put_line('name:'||v_name);
exception
when no_data_found then
dbms_output.put_line('error name');
end;
--匿名块
-- 没有名称的pl/sql块,如例1
--命名块
--子程序
-- (1)过程
-- 建立过程时可以指定输入参数(in),输出参数(out)
create or replace procedure update_money(uname varchar2,num number)
is
begin
update tb_rd_user_info set game_money = num
where user_name = uname;
end update_money;
-- 删除
drop procedure update_money;
-- 调用
exec update_money('ywj123',100000);
call update_money('ywj123',100000);
-- 重新编译
alter procedure update_money compile;
-- 授权student用户使用该过程
grant execute on update_money to student;
-- (2)函数
-- 创建
create or replace function get_user_id(uname varchar2)
return number is
uid number;
begin
select user_id into uid from tb_rd_user_info
where user_name=uname;
return uid;
end;
-- 调用
var rs number
call get_user_id('ywj123') into :rs;
-- 删除
drop function get_user_id;
-- 重新编译
alter function get_user_id compile;
-- (3)包
-- 创建(包由包规范和包体两部分组成)
-- 包规范
create package emp_pkg is
procedure update_money (uname varchar2,num number);
function get_user_id(uname varchar2) return number;
end;
-- 包体
create package body emp_pkg is
procedure update_money(uname varchar2,num number)
is
begin
update tb_rd_user_info set game_money = num
where user_name = uname;
end update_money;
function get_user_id(uname varchar2)
return number is
uid number;
begin
select user_id into uid from tb_rd_user_info
where user_name=uname;
return uid;
end;
end;
-- 调用
call emp_pkg.update_money('ywj123',100000);
var rs number
call emp_pkg.get_user_id('ywj123') into :rs;
--解发器
存储过程参数传递
参数的作用是向存储过程传递数据,或从存储过程获得返回结果。正确的使用参数可以大大增加存储过程的灵活性和通用性。
参数的类型有三种,如下所示。
IN 定义一个输入参数变量,用于传递参数给存储过程
OUT 定义一个输出参数变量,用于从存储过程获取数据
IN OUT 定义一个输入、输出参数变量,兼有以上两者的功能
参数的定义形式和作用如下:
参数名 IN 数据类型 DEFAULT 值;
定义一个输入参数变量,用于传递参数给存储过程。在调用存储过程时,主程序的实际参数可以是常量、有值变量或表达式等。DEFAULT 关键字为可选项,用来设定参数的默认值。如果在调用存储过程时不指明参数,则参数变量取默认值。在存储过程中,输入变量接收主程序传递的值,但不能对其进行赋值。
参数名 OUT 数据类型;
定义一个输出参数变量,用于从存储过程获取数据,即变量从存储过程中返回值给主程序。
在调用存储过程时,主程序的实际参数只能是一个变量,而不能是常量或表达式。在存储过程中,参数变量只能被赋值而不能将其用于赋值,在存储过程中必须给输出变量至少赋值一次。
参数名 IN OUT 数据类型 DEFAULT 值;
定义一个输入、输出参数变量,兼有以上两者的功能。在调用存储过程时,主程序的实际参数只能是一个变量,而不能是常量或表达式。DEFAULT 关键字为可选项,用来设定参数的默认值。在存储过程中,变量接收主程序传递的值,同时可以参加赋值运算,也可以对其进行赋值。在存储过程中必须给变量至少赋值一次。
如果省略IN、OUT或IN OUT,则默认模式是IN。
CREATE OR REPLACE PROCEDURE CHANGE_SALARY(P_EMPNO IN NUMBER DEFAULT 7788,P_RAISE NUMBER DEFAULT 10)
AS
V_ENAME VARCHAR2(10);
V_SAL NUMBER(5);
BEGIN
SELECT ENAME,SAL INTO V_ENAME,V_SAL FROM EMP WHERE EMPNO=P_EMPNO;
UPDATE EMP SET SAL=SAL+P_RAISE WHERE EMPNO=P_EMPNO;
DBMS_OUTPUT.PUT_LINE('雇员'||V_ENAME||'的工资被改为'||TO_CHAR(V_SAL+P_RAISE));
COMMIT;
EXCEPTION
WHEN OTHERS THEN
DBMS_OUTPUT.PUT_LINE('发生错误,修改失败!');
ROLLBACK;
END;
参数的值由调用者传递,传递的参数的个数、类型和顺序应该和定义的一致。如果顺序不一致,可以采用以下调用方法。如上例,执行语句可以改为:
EXECUTE CHANGE_SALARY(P_RAISE=>80,P_EMPNO=>7788);
可以看出传递参数的顺序发生了变化,并且明确指出了参数名和要传递的值,=>运算符左侧是参数名,右侧是参数表达式,这种赋值方法的意义较清楚。
分享到:
相关推荐
在《ORACLE存储过程,函数,包,游标》这个文本文件中,可能包含了关于如何定义、调用和管理这些对象的示例代码和实践指导。通过阅读和理解这个文件,开发者能够深入了解Oracle数据库的动态编程能力,提升其在数据库...
### Oracle存储过程、函数和包的关键知识点 #### 1. 存储过程和函数的认识 - **定义**:存储过程和函数是特定类型的PL/SQL块,它们被存储在数据库中,作为命名的对象存在。 - **命名存储**:与普通的PL/SQL块不同,...
Oracle 存储过程函数和程序包 Oracle 存储过程函数和程序包是 Oracle 数据库中的一种核心组件,用于实现复杂的业务逻辑和数据处理。以下是 Oracle 存储过程函数和程序包的知识点总结: 一、游标的概念和类型 游标...
### Oracle存储过程、函数与DBLink详解 #### 一、Oracle存储过程简介 在Oracle数据库中,存储过程是一种预编译好的SQL代码集合,它可以接受输入参数、返回单个值或多个值,并能够执行复杂的数据库操作。存储过程...
1. 参数类型匹配:确保Java中的参数类型与Oracle存储过程或函数中的参数类型一致,否则可能导致转换异常。 2. 注意游标处理:有些存储过程可能返回游标,需要特别处理。 3. 事务管理:根据业务需求,可能需要手动...
通过学习和实践这些Oracle存储过程和函数的实例,你可以更好地理解和掌握如何在实际项目中应用它们。Oracle 存储过程详解.doc文档可能包含了更多详细的步骤和示例,建议详细阅读,以深化对这一主题的理解。
Oracle存储过程和函数是数据库管理中的重要组成部分,它们允许开发者创建复杂的业务逻辑和数据处理流程。在这个"Oracle存储过程函数生成DEMO"中,我们主要关注如何在Oracle数据库环境中设计、编写、测试以及调用存储...
Oracle数据库系统中,函数、存储过程和包是重要的PL/SQL编程元素,它们在数据库管理和应用开发中扮演着核心角色。 1. **函数**: - **系统函数**:Oracle预定义的一系列函数,如SYSDATE获取当前日期,USER获取当前...
Oracle存储过程、函数和程序包是数据库管理中的关键概念,它们是PL/SQL编程的核心组成部分。存储过程是一种预编译的、命名的PL/SQL代码块,可以存储在数据库中,便于多次调用,提高效率并实现代码的模块化。在创建...
### Oracle存储过程、游标、函数的详解 #### 一、概述 在Oracle数据库中,存储过程、游标和函数是非常重要的组成部分,它们为数据库管理提供了强大的编程能力。通过学习这些概念,我们可以更加灵活地管理和操作...
根据提供的文件内容,本文将详细解释Oracle数据库中的存储过程、函数和包的创建与使用方法。这三者都是Oracle数据库中PL/SQL编程的重要组成部分,它们可以提高代码的复用性和可维护性,并且能够有效地封装数据库逻辑...
oracle笔记存储函数和存储过程,有具体的代码案例!存储函数和存储过程的知识笔记!
在Oracle数据库开发中,存储过程和函数以及PL/SQL语言是至关重要的组成部分。这篇内容将深入解析这些核心概念。 首先,我们来谈谈“存储过程”。存储过程是一组预编译的SQL语句,可以在数据库中保存并重复调用,以...
### Oracle函数调用存储过程详解 #### 背景与目的 在开发Oracle应用程序时,经常需要使用到存储过程和函数。这两种类型的数据库对象各有优势,可以满足不同的业务需求。有时候,为了更好地组织代码和提高复用性,...
存储过程、函数、触发器和包
本文实例讲述了Python使用cx_Oracle调用Oracle存储过程的方法。分享给大家供大家参考,具体如下: 这里主要测试在Python中通过cx_Oracle调用PL/SQL。 首先,在数据库端创建简单的存储过程。 create or replace ...
### Oracle学习之函数与存储过程详解 #### 一、函数的定义及应用 函数在Oracle中主要用于执行特定的计算或逻辑处理,并返回一个结果。它们是数据库编程中的重要组成部分,可以提高代码的重用性和可维护性。 #####...
以下是一个简单的示例,展示了如何调用一个不带参数的Oracle存储过程: ```java Session session = sessionFactory.openSession(); Transaction transaction = session.beginTransaction(); session....
Oracle存储过程是数据库管理系统中的一种重要特性,它允许开发者编写一系列SQL语句和PL/SQL块,形成可重复使用的代码单元。这篇博客“oracle存储过程-帮助文档”可能提供了关于如何创建、调用和管理Oracle存储过程...