精华内容
下载资源
问答
  • 作者:peace.zhao 关于 游标 if,for 的例子 create or replace procedure peace_if is cursor var_c is select * from grade; begin for temp in var_c loop if temp.course_name = ‘OS’ then dbms_output.put_line...
  • Oracle存储过程和函数(最详细包含emp 表实例操作,边看边操作),目前最详细的存储过程文档,不好你举报我。含好多ORACLE SCOTT中emp表的实例。
  • —————–存储过程———————— –定义  create[or replace] procedure 存储过程名称(参数名 [in]/out 数据类型)  is/as  begin –逻辑表达式  end [存储过程名称]; –定义存储过程计算年薪,并答应...
  • oracle存储过程和函数的语法 如下
  • oracle 存储过程和函数的调用方法

    千次阅读 2017-02-10 14:58:14
    存储过程(PROCEDURE) 使用过程, 不仅可以简化客户端应用程序的开发维护,而且可以提高应用程序的运行性能. CREATE [OR REPLACE] PROCUDURE procedure_name (arg1 [model1] datatype1, arg2[model2] datatype2) ...
    一.存储过程(PROCEDURE)
    
    使用过程, 不仅可以简化客户端应用程序的开发和维护,而且可以提高应用程序的运行性能.
    CREATE [OR REPLACE] PROCUDURE procedure_name
    (arg1 [model1] datatype1, arg2[model2] datatype2)
    IS [AS]
    PL/SQL Block;
    arg1,arg2用于指定过程的参数,IS/AS用于开始一个PL/SQL块.当指定参数数据类型时,不能指定其长度.
    在建立过程的时间,既可以指定输入参数(IN),也可以指定输出参数(OUT)以及输入输出参数(IN OUT).如果不定义参数模式,则默认为输入参数,如果要定义输出参数,则需要指定OUT关键字,如果定义输入输出参数,
    要指定IN OUT关键字.
    一般使用execute(或exec) 过程名 或者 call 过程名来调用过程.
    set serveroutput on打开 Oracle 的输出.
    (1)不带参数的过程
    CREATE OR REPLACE PROCEDURE out_time
    IS
    BEGIN    
    dbms_output.put_line(systimestamp);
    END;

    call out_time();或者 exec out_time;
    (2)带IN参数的过程
    如果不指定参数模式,则默认的为IN,也可以显示的指定输入模式IN.
    CREATE OR REPLACE PROCEDURE add_employee
    (eno NUMBER,name VARCHAR2,sal NUMBER,job VARCHAR2 DEFAULT 'CCC', dno NUMBER)
    IS
    BEGIN
    INSERT INTO emp(empno, ename,sal,job,deptno)
    VALUES(eno,ename,sal,job,dno);
    EXCEPTION
    WHEN DUP_VAL_ON_INDEX THEN
    RAISE_APPLICATION_ERROR(-20000, '雇员不能重复');
    END;
    除了默认值的参数外,其余的都要输入.
    (3)带OUT的过程
    在过程中输出结果是使用OUT或者IN OUT来完成的.
    定义输出参数的时间,必须要使用OUT来定义输出.
    CREATE OR REPLACE PROCEDURE query_employee
    (eno NUMBER,name OUT VARCHAR2,sal OUT NUMBER)
    IS
    BEGIN
    SELECT ename, sal INTO name, sal FROM emp WHERE empno=eno;
    EXCEPTION
    WHEN NO_DATA_FOUND THEN
    RAISE_APPLICATION_ERROR(-20000, '雇员不存在');
    END;
    对于指定为OUT类型的参数,必须定义变量接收输出参数的数据.调用实例:
    SQL> var name VARCHAR2(10)
    SQL> var sal NUMBER
    SQL> exec query_employee(77,:name,:sal)
    SQL> print name sal
    (4)带IN和OUT的过程
    在调用前要通过变量给参数传递数据,在调用结束后,会通过此变量将值传递给应用程序
    CREATE OR PROCEDURE compute
    (num IN OUT NUMBER, num2 IN OUT NUMBER)
    IS 
    v1 NUMBER;
    v2 NUMBER;
    BEGIN
    v1:=num1/num2;
    v2:=MOD(num1, num2);
    num1 := v1;
    num2 := v2;
    END;
    在应用程序调用IN OUT的存储过程时,必须提供两个变量临时存放数值,运行如下:
    SQL> var n1 NUMBER
    SQL> var n2 NUMBER
    SQL> exec :n1:=100
    SQL> exec :n2:=30
    SQL> exec compute(:n1, :n2)
    SQL> PRINT n1 n2
    (5)为参数传递变量和数据
    [1]位置传递
    如 SQL> exec add_dept(50, 'SALES', 'NEW YORK')
    [2]名称传递,使用=>符号来指定值
    如 SQL> exec add_dept(dno=>50)
    [3]组合传递,以上两种传递方法交替
    (6)查看过程的源代码
    过程名,源代码,执行代码放到了数据字典中,通过查询数据字典USER_SOURCE,可以显示当前用户定义的过程
    SELECT text FROM user_source WHERE name='ADD_DEPT';
    (7)删除过程
    DROP PROCEDURE 过程名

    二.函数(FUNCTION)
    CREATE [OR REPLACE] FUNCTION function_name
    (arg1 [model1] datatype1,arg2 [model2] datatype2)
    RETURN datatype
    IS|AS
    PL/SQL Block;
    arg1,arg2指定函数的参数,当不指定参数数据类型时,不能指定其长度
    RETURN 指定函数返回的数据类型.注意,函数前面必须要有RETURN子句.在函数体内至少含有一条RETURN子句.函数的参数MODEl和过程的一样
    (1)不带参数的函数
    CREATE OR REPLACE FUNCTION get_user
    RETURN VARCHAR2
    IS
    v_user VARCHAR2(100);
    BEGIN
    SELECT username INTO v_user FROM user_users;
    RETURN v_user;
    END;
    调用方法
    SQL> var v1 VARCHAR2(100)
    SQL> exec :v1:=get_user
    SQL> PRINT v1
    (2)带IN参数
    CREATE OR REPLACE FUNCTION get_sal(name IN VARCHAR2)
    RETURN NUMBER
    IS
    v_sal emp.sal%TYPE;
    BEGIN
    SELECT sal INTO v_sal FROM emp
    WHERE upper(ename)=upper(name);
    RETURN v_sal;
    EXCEPTION
    WHEN NO_DATA_FOUND THEN
    raise-application_error(-20000,'该雇员不存在');
    END;
    调用方法如下:
    SQL> var sal NUMBER
    SQL> exec :sal:=get_sal('scott')
    SQL> print sal
    (3)带OUT参数
    一般情况下,函数只需要单个返回数据,如果希望使用函数同事返回多个数据,就需要用到输出参数了.
    CREATE OR REPLACR FUNCTION get_info 
    (name VARCHAR2, title OUT VARCHAR2)
    RETURN VARCHAR2
    AS
    deptname dept.dname%TYPE;
    BEGIN
    SELECT a.job,b.dname INTO title, deptname
    FROM emp a, dept b
    WHERE a.deptno = b.deptno
    AND upper(a.ename) = upper(a.ename)
    RETURN deptname;
    EXCEPTION
    WHEN NO_DATA_FOUND THEN
    raise_application_erro(-20000, '雇员不存在');
    END;
    由于此函数带有OUT参数,所以要定义变量接收OUT参数和函数的返回值
    SQL> var job varchar2(20)
    SQL> var dname varchar2920)
    SQL> exec :dname:=getinfo('scott',:job)
    SQL> print dname job
    (4)带IN OUT参数
    在调用函数之前需要通过变量给该种参数传递数据
    CREATE OR REPLACE FUNCTION result
    (num1 NUMBER, num2 IN OUT NUMBER)
    RETURN NUMBER
    AS
    v_result NUMBER(6);
    v_remain NUMBER;
    BEGIN
    v_result:=num1/num2;
    v_remain:=MOD(num1, num2);
    num2 := v_remain;
    RETURN v_result;
    EXCEPTION
    WHEN ZERO_DIVIDE THEN
    raise_application_error(-20000, '不能除0');
    END;
    执行如下:
    SQL> var result1 NUMBER
    SQL> var result2 NUMBER
    SQL> exec :result2:=30
    SQL> exec :result1:=result(100, :result2)
    SQL> print result1 result2
    (5)函数的删除
    DROP FUNCTION 函数名

    三.子程序的管理
    列出当前用户的子程序
    数据字典视图USER_OBJECTS显示当前用户所包含的所有对象.可以列出用户的表,视图,索引,也可以列出用户的过程,函数等.
    SELECT object_name, created, status FROM user_object2 WHERE object_type IN ('PROCEDURE', 'FUNCTION');
    展开全文
  • 主要介绍Oracle数据库开发技术,包括存储过程函数、游标及plsql的教程。
  • 本篇文章主要介绍了Oracle存储过程和自定义函数详解,有需要的可以了解一下。
  • 本文实例讲述了oracle 存储过程函数和触发器用法。分享给大家供大家参考,具体如下: 一、存储过程存储函数 指存储在数据库中供所有用户程序调用的子程序叫存储过程存储函数。 创建存储过程 用CREATE ...
  • Oracle 存储过程函数的创建调用

    千次阅读 2018-12-15 22:20:52
    一、Oracle 创建调用存储过程 1、基本语法 create or replace procedure update_emp_sal (Name in out type, Name in out type, ... ) is begin end update_emp_sal; 可能不了解 in 参数, Oracle 过程中定义...

    一、Oracle 创建和调用存储过程

    1、基本语法

    create or replace procedure update_emp_sal
    (Name in out type,
     Name in out type, ...
    ) is
    begin
      
    end update_emp_sal;
    

    可能不了解 in out 参数,
    Oracle 过程中定义了 in / out / in out 三种参数模式。
    (1)in 就是传入但存储过程里面处理的参数,传进去供查询语句使用。
    (2)out 参数就是返回值的参数。返回查询的结果集。
    (3)in out 输入输出模式:能接收传入的实参值;在子程序内部可以修改; 可以输出(必须用实参变量调用)

    in 参数就像 c++ 语言里函数一般的参数那样,而 out 函数就像 c++ 里函数的引用类型参数一样,不知道我比喻是否正确,请高手指点。

    如果不知道参数类型,可以参考:

    create or replace procedure DEPT_AVG_SAL(p_deptno emp.dept_id%TYPE)
    as v_sal emp.salary%TYPE;
    
    begin
          Select avg(salary)  into v_sal
          from emp
        where dept_id = p_deptno;
          dbms_output.put_line(p_deptno || ' : ' || 'average salary is:' || v_sal);
    
    end DEPT_AVG_SAL;
    

    2、写一个简单的例子修改 emp 表的 ename 字段:

    create or replace procedure update_emp
    (
    v_empno  varchar2,
    v_ename  varchar2
    ) is
    begin
    
    update emp set ename=v_ename where empno=v_empno;  
    
    end update_emp;
    

    调用方法如下:

    SQL>exec  update_emp('7935','test');
    

    2、有返回值的存储过程

    就写一个简单的返回 empno=7935 的 sal 值

    create or replace procedure emp_out_sal
     (
     v_empno in varchar2,
     v_sal out number
     ) is
     vsal number(7,2);
     begin
     
     select sal into vsal from emp where empno=v_empno;
     v_sal:=vsal;
     end;
    

    调用有返回值的过程方法(1)

    SQL> var vsal number
    SQL> exec emp_out_sal('7935',:vsal);
    
    PL/SQL procedure successfully completed
    vsal
    

    调用有返回值的过程方法(2)

    SQL> var vsal number
    SQL> call emp_out_sal('7935',:vsal);
    
    Method called
    vsal
    

    二、Oracle 创建和调用函数(function)

    1、基本语法规则如下:

    create or replace function (Name in type, Name in type, ...) return number is
      Result number;
    begin
      
      return (Result);
    end ;
    

    2、写一个简单的查询例子查询出 empno=7935 的 sal 值

    create or replace function ret_emp_sal(v_ename varchar2)
    return number
    is
    v_sal number(7,2);
    begin
    select nvl(sal,0) into v_sal from emp where lower(ename)=lower(v_ename);
    return v_sal;
    end;
    

    调用此函数:

    SQL> var vsla number
    SQL> call ret_emp_sal('7935') into :vsal;
    
    Method called
    vsal
    
    展开全文
  • Oracle之存储过程和存储函数

    千次阅读 2019-01-31 18:59:34
    存储过程和存储函数是用来让java代码来调用的.  存储过程和存储函数其实就是拿qlspl写的子程序,存储过程没有返回值,存储函数可以用return 返回值 创建一个存储过程  调用方式有两种  带参的存储...

    存储过程和存储函数是用来让java代码来调用的. 

    存储过程和存储函数其实就是拿qlspl写的子程序,存储过程没有返回值,存储函数可以用return 返回值

    创建一个存储过程 

    调用方式有两种

     带参的存储过程,创建,参数中的in有两个可选值,in或者out,in代表整个参数是外面传进来的,后面的is和as的作用一样两种写法,在这个过程当中没有commit提交,因为在调用的时候可能一下调用多次,到时候再提交可以保证在一个事务中完成.

    --给指定的员工涨100,并且打印涨前和涨后的薪水
    create or replace procedure raiseSalary(eno in number)
    is
           --定义变量保存涨前的薪水
           psal emp.sal%type;
    begin
           --得到涨前的薪水
           select sal into psal from emp where empno=eno;
           
           --涨100
           update emp set sal=sal+100 wher empno=eno;
           
           --要不要commit?
           
           dbms_output.put_line('涨前:'||psal||'   涨后:'||(psal+100));
    end raiseSalary;
    

    运行完下面的代码后

    --查询某个员工的年收入
    create or replace function queryEmpIncome(eno in number) 
    return number
    is
           --定义变量保存月薪和奖金
           psal emp.sal%type;
           pcomm emp.comm%type;
    begin
           --得到月薪和奖金
           select sal,comm into psal,pcomm from emp where empno=eno; 
           
           --返回年收入
           return psal*12+nvl(pcomm,0);
    
    end queryEmpIncome;
    

    测试

    把这参数改为你要查的参数,然后点确定

    这就说输出的值

    在上面提到过程是没有返回值的,函数有返回值,其实这句话是不对的,过程和函数都有out参数,有了这个out参数这两个就都有了返回值,并且可以返回多个值,如果只有一个返回值的时候就用存储函数,如果没有或者多个返回值的时候就用存储过程,这不是必须的,只是一般来讲.

    示例

    --查询某个员工的姓名 薪水和职位
    
    create or replace procedure queryEmpInformation(eno in number,
                                                    pename out varchar2,
                                                    psal   out number,
                                                    pjob   out varchar2)
    is
    begin
      
       select ename,sal,job into pename,psal,pjob from emp where empno=eno;                                             
    
    end queryEmpInformation;

    运行测试,其实=>这种形式也是赋值的操作.

    这个需要来回点,才能看到三个值

    其实这个早期是没有out返回值的,版本更新后才有了out,使得存储函数多余了,但是写程序要兼容老的版本,再任何环境都能运行

    通过desc加程序包名就可以打印出它里面的所有方法

    Oracle之包头和包体的创建https://blog.csdn.net/kxj19980524/article/details/86737316

    Oracle之java调用存储过程和存储函数https://blog.csdn.net/kxj19980524/article/details/86737385

    展开全文
  • oracle中的存储过程和存储函数的区别

    万次阅读 多人点赞 2018-11-13 18:36:02
    oracle中的存储过程和存储函数的区别 (尊重劳动成果,转载请注明出处:https://blog.csdn.net/qq_39778516/article/details/84032796 consistencely的博客) 1.存储过程 存储过程(Stored Procedure)是在大型...

    oracle中的存储过程和存储函数的区别
    (尊重劳动成果,转载请注明出处:https://blog.csdn.net/qq_39778516/article/details/84033710 consistencely的博客)
    1.存储过程
    存储过程(Stored Procedure)是在大型数据库系统中,一组为了完成特定功能的 SQL 语句集,经编译后存储在数据库中,用户通过指定存储过程的名字并给出参数(如果该存储过程带有参数)来执行它。存储过程是数据库中的一个重要对象,任何一个设计良好的数据库应用程序都应该用到存储过程。
    创建存储过程语法
    create [or replace] PROCEDURE 过程名[(参数名 in/out 数据类型)]
    as/is
    begin
    PLSQL 子程序体;
    End;
    范例:创建一个输出 helloword 的存储过程。
    在这里插入图片描述
    调用存储过程
    在 plsql 中调用存储过程。
    在这里插入图片描述
    范例 2:给指定的员工涨 100 工资
    分析:我们需要使用带有参数的存储过程。
    方法一:
    在这里插入图片描述
    方法二:
    在这里插入图片描述
    在这里插入图片描述
    2.存储函数
    存储过程和存储函数的区别
    一般来讲,过程和函数的区别在于函数可以有一个返回值;而过程没有返回值。但过程和函数都可以通过 out 指定一个或多个输出参数。我们可以利用 out 参数,在过程和函数中实现返回多个值。
    语法:
    在这里插入图片描述
    范例:使用存储函数来查询指定员工的年薪
    在这里插入图片描述
    使用存储过程来替换上面的例子
    在这里插入图片描述
    在这里插入图片描述
    3.本质区别:
    存储函数有返回值,而存储过程没有返回值。
    3.1 如果存储过程想实现有返回值的业务,我们就必须使用out类型的参数。
    3.2 即便是存储过程使用了out类型的参数,起本质也不是真的有了返回值,
    3.3 而是在存储过程内部给out类型参数赋值,在执行完毕后,我们直接拿到输出类型参数的值。
    案例需求:查询出员工姓名,员工所在部门名称。
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    4.Java 程序调用存储过程
    在这里插入图片描述
    5.Java 程序调用存储函数
    在这里插入图片描述

    展开全文
  • 介绍 本文是与从Hibernate调用各种关系数据库系统存储过程和...Oracle存储过程 Oracle支持存储过程和函数,因此首先我们将从以下存储过程开始,该过程输出一个简单的值。 Oracle存储过程输出一个简单的值 CRE...
  • 相同点 都是存储在数据库的plsql代码块中 区别 定义关键字不同,存储过程procedure,函数function ...调用方式不同,存储过程通过call或者plsql代码块中调用,函数通过SQL语句或者plsql代码块中调用 ...
  • oracle存储过程函数的区别

    万次阅读 2017-08-15 22:49:38
    定义: 存储过程(Stored Procedure )是一组为了完成特定功能的SQL 语句集,经编译后存储在数据库...存储过程是由流控制SQL 语句书写的过程,这个过程经编译优化后存储在数据库服务器中,应用程序使用时只要调用
  • oracle pl/sql 存储过程和函数与触发器
  • oracle存储过程函数、触发器和包

    千次阅读 2018-05-22 07:52:46
    要点:存储过程的创建带参数的存储过程的使用存储过程的管理函数的创建使用触发器的类型作用程序包的创建使用存储过程1、存储过程的创建2、调用存储过程3、带参数的存储过程4、修改与删除存储过程5、查询存储...
  • 专题七 过程函数和程序包;回顾;教学目标;工作任务 ;相关实践知识;不带参数的过程2-1;不带参数的过程2-2;带输入参数的过程3-1;带输入参数的过程3-2;带输入参数的过程3-3;带输出参数的过程3-1;带输出参数的过程3-2;带...
  • Oracle学习开发常用的SQL和存储过程学习(内含SQL面试题目和存储过程函数面试题目,里面有丰富的SQL基本语法学习SQL练习题以及存储过程非常适合新手找工作的人群
  • 存储过程和存储函数 存储在数据库中供所有用户程序调用的子程序叫做存储过程存储函数。 区别:是否可以通过return返回函数值。存储函数可以通过return返回函数值,而存储过程不可以。 相同点:完成特定功能的...
  • 实验八 存储过程和函数的使用 实验目的 (1)掌握存储过程的意义 (2)掌握存储过程的使用方法 (3)掌握函数的意义 (4)掌握函数的使用方法
  • oracle笔记存储函数和存储过程,有具体的代码案例!存储函数和存储过程的知识笔记!
  • 很清晰的说明了存储过程和函数的区别
  • Oracle存储过程、游标、函数的详解
  • ORACLE下的存储过程和函数 存储过程和函数是一种操作块,用来流程化、整体化处理业务逻辑的数据库操作方式。我理解的是相当于java开发语言中方法的概念,存储过程和函数的区别在于函数可以有返回值,而过程没有...
  • NULL 博文链接:https://uule.iteye.com/blog/1912517

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 140,865
精华内容 56,346
关键字:

oracle存储过程和函数