`

oracle存储过程,函数,包

阅读更多
--例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 varchar2return 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数据库的动态编程能力,提升其在数据库...

      Oracle存储过程、函数和包

      ### Oracle存储过程、函数和包的关键知识点 #### 1. 存储过程和函数的认识 - **定义**:存储过程和函数是特定类型的PL/SQL块,它们被存储在数据库中,作为命名的对象存在。 - **命名存储**:与普通的PL/SQL块不同,...

      oracle存储过程函数和程序包.ppt

      Oracle 存储过程函数和程序包 Oracle 存储过程函数和程序包是 Oracle 数据库中的一种核心组件,用于实现复杂的业务逻辑和数据处理。以下是 Oracle 存储过程函数和程序包的知识点总结: 一、游标的概念和类型 游标...

      oracle 存储过程 函数 dblink

      ### Oracle存储过程、函数与DBLink详解 #### 一、Oracle存储过程简介 在Oracle数据库中,存储过程是一种预编译好的SQL代码集合,它可以接受输入参数、返回单个值或多个值,并能够执行复杂的数据库操作。存储过程...

      java调用oracle存储过程或者函数

      1. 参数类型匹配:确保Java中的参数类型与Oracle存储过程或函数中的参数类型一致,否则可能导致转换异常。 2. 注意游标处理:有些存储过程可能返回游标,需要特别处理。 3. 事务管理:根据业务需求,可能需要手动...

      Oracle存储过程和函数(最详细包含emp 表实例操作,边看边操作)

      通过学习和实践这些Oracle存储过程和函数的实例,你可以更好地理解和掌握如何在实际项目中应用它们。Oracle 存储过程详解.doc文档可能包含了更多详细的步骤和示例,建议详细阅读,以深化对这一主题的理解。

      oracle存储过程函数生成DEMO

      Oracle存储过程和函数是数据库管理中的重要组成部分,它们允许开发者创建复杂的业务逻辑和数据处理流程。在这个"Oracle存储过程函数生成DEMO"中,我们主要关注如何在Oracle数据库环境中设计、编写、测试以及调用存储...

      Oracle中的函数、存储过程、包

      Oracle数据库系统中,函数、存储过程和包是重要的PL/SQL编程元素,它们在数据库管理和应用开发中扮演着核心角色。 1. **函数**: - **系统函数**:Oracle预定义的一系列函数,如SYSDATE获取当前日期,USER获取当前...

      oracle存储过程函数程序包课件ppt

      Oracle存储过程、函数和程序包是数据库管理中的关键概念,它们是PL/SQL编程的核心组成部分。存储过程是一种预编译的、命名的PL/SQL代码块,可以存储在数据库中,便于多次调用,提高效率并实现代码的模块化。在创建...

      Oracle存储过程、游标、函数的详解

      ### Oracle存储过程、游标、函数的详解 #### 一、概述 在Oracle数据库中,存储过程、游标和函数是非常重要的组成部分,它们为数据库管理提供了强大的编程能力。通过学习这些概念,我们可以更加灵活地管理和操作...

      oracle中的存储过程.函数,包

      根据提供的文件内容,本文将详细解释Oracle数据库中的存储过程、函数和包的创建与使用方法。这三者都是Oracle数据库中PL/SQL编程的重要组成部分,它们可以提高代码的复用性和可维护性,并且能够有效地封装数据库逻辑...

      oracle笔记存储函数和存储过程

      oracle笔记存储函数和存储过程,有具体的代码案例!存储函数和存储过程的知识笔记!

      oracle存储过程和函数PPT

      在Oracle数据库开发中,存储过程和函数以及PL/SQL语言是至关重要的组成部分。这篇内容将深入解析这些核心概念。 首先,我们来谈谈“存储过程”。存储过程是一组预编译的SQL语句,可以在数据库中保存并重复调用,以...

      oracle函数调用存储过程

      ### Oracle函数调用存储过程详解 #### 背景与目的 在开发Oracle应用程序时,经常需要使用到存储过程和函数。这两种类型的数据库对象各有优势,可以满足不同的业务需求。有时候,为了更好地组织代码和提高复用性,...

      存储过程、函数、触发器和包

      存储过程、函数、触发器和包

      Python使用cx_Oracle调用Oracle存储过程的方法示例

      本文实例讲述了Python使用cx_Oracle调用Oracle存储过程的方法。分享给大家供大家参考,具体如下: 这里主要测试在Python中通过cx_Oracle调用PL/SQL。 首先,在数据库端创建简单的存储过程。 create or replace ...

      oracle学习之函数存储过程

      ### Oracle学习之函数与存储过程详解 #### 一、函数的定义及应用 函数在Oracle中主要用于执行特定的计算或逻辑处理,并返回一个结果。它们是数据库编程中的重要组成部分,可以提高代码的重用性和可维护性。 #####...

      hibernate query调用oracle存储过程

      以下是一个简单的示例,展示了如何调用一个不带参数的Oracle存储过程: ```java Session session = sessionFactory.openSession(); Transaction transaction = session.beginTransaction(); session....

      oracle存储过程-帮助文档

      Oracle存储过程是数据库管理系统中的一种重要特性,它允许开发者编写一系列SQL语句和PL/SQL块,形成可重复使用的代码单元。这篇博客“oracle存储过程-帮助文档”可能提供了关于如何创建、调用和管理Oracle存储过程...

    Global site tag (gtag.js) - Google Analytics