精华内容
下载资源
问答
  • oracle函数调用存储过程.doc
  • Oracle存储函数 1.函数声明 函数名 参数列表定义语法:参数名 in 类型 返回值字符串类型必须指定长度 局部变量定义语法:变量名 变量类型 create or replace function hello_world(name in string) return ...

    Oracle存储函数

    1.函数声明

    • 函数名
    • 参数列表
    定义语法:参数名 in 类型
    
    • 返回值
    字符串类型必须指定长度
    
    • 局部变量
    定义语法:变量名 变量类型
    
    create or replace function hello_world(name in string)
        return string
    as
        ret_str string(200);
    begin
        ret_str := concat('hello,', name);
        return ret_str;
    end;
    

    2.函数调用

    • 声明存储返回值的变量使用declare
    declare语法:declare 变量名 变量类型
    
    declare
        ret string(100);--指定字符串长度,不然会报错:PLS-00215: 字符串长度限制在范围 (1...32767)
    begin
        ret:=HELLO_WORLD('哈哈哈');
        DBMS_OUTPUT.PUT_LINE(ret);
    end;
    

    ⚠️ 注意事项

    1. 函数内的局部变量类型为string时,必须指定长度,不然会报
    PLS-00215: 字符串长度限制在范围 (1...32767)
    
    1. DBMS_OUTPUT.PUT_LINE()函数只接受字符串类型,其它类型会报错
    展开全文
  • JPA调用oracle存储函数

    千次阅读 2018-08-28 18:17:47
    JPA调用oracle存储函数 Oracle stored procedures 带有返回值 简单的Oracle函数 Oracle函数 CREATE OR REPLACE **PROCEDURE** count_comments ( postId IN NUMBER, commentCount OUT NUMBER ) AS BEGIN ...

    JPA调用oracle存储函数

    Oracle stored procedures

    带有返回值 简单的Oracle函数

    Oracle函数

    CREATE OR REPLACE **PROCEDURE** count_comments (  
       postId IN NUMBER,  
       commentCount OUT NUMBER )  
    AS 
    BEGIN 
        SELECT COUNT(*) INTO commentCount  
        FROM post_comment  
        WHERE post_id = postId; 
    END;
    

    JPA处理

     StoredProcedureQuery query = entityManager
    .createStoredProcedureQuery("count_comments")
    .registerStoredProcedureParameter(1, Long.class, 
        ParameterMode.IN)
    .registerStoredProcedureParameter(2, Long.class, 
        ParameterMode.OUT)
    .setParameter(1, 1L);
    
    query.execute();
    
    Long commentCount = (Long) query.getOutputParameterValue(2);
    

    注意:

    1。索引中丢失 IN 或 OUT 参数

    此错误是由于Oracle函数的参数值与JPA中给的不统一

    还有 java中获取参数的值为NULL的情况,均可导致,需注意!!!

    2.entityManager 数据源

    若项目中是多数据源 ,需要添加以下标识:

     @PersistenceContext(unitName = "yourOtherEntityManagerFactory")
    private EntityManager entityManager;
    

    指定数据源

    Oracle functions

    Oracle function 简单小例子

    Oracle

    CREATE OR REPLACE FUNCTION fn_count_comments ( 
        postId IN NUMBER ) 
        RETURN NUMBER 
    IS
        commentCount NUMBER; 
    BEGIN
        SELECT COUNT(*) INTO commentCount 
        FROM post_comment 
        WHERE post_id = postId; 
        RETURN( commentCount ); 
    END;
    

    JPA

    BigDecimal commentCount = (BigDecimal) entityManager
    .createNativeQuery(
        "SELECT fn_count_comments(:postId) FROM DUAL"
    )
    .setParameter("postId", 1L)
    .getSingleResult();
    

    具体可参考链接

    https://vladmihalcea.com/how-to-call-oracle-stored-procedures-and-functions-from-hibernate/

    展开全文
  • ORACLE存储过程调用自定义函数

    千次阅读 2018-03-22 13:21:22
    在写存储过程的时候经常要创建临时表组织数据,创建临时表的时候需要判断该表是否已经存在。 V_SQL:='CREATE TABLE BI_ZJ_ZJGJ( ZHZBH VARCHAR2(20), ZHZMC VARCHAR2(50), DWBH VARCHAR2(20), DWMC VARCHAR2(10....
    在写存储过程的时候经常要创建临时表组织数据,创建临时表的时候需要判断该表是否已经存在。
    
     V_SQL:='CREATE TABLE BI_ZJ_ZJGJ(
                ZHZBH VARCHAR2(20),
                ZHZMC VARCHAR2(50),
                DWBH VARCHAR2(20),
                DWMC VARCHAR2(100),
                ZHNM VARCHAR2(50),
                ZHMC VARCHAR2(200),
                HBZJ NUMBER(20,8),
                YGJZJ NUMBER(20,8),
                GJL NUMBER(20,8)
                )';
    
        SELECT COUNT(1) INTO V_FLAG FROM USER_TABLES WHERE TABLE_NAME='BI_ZJ_ZJGJ';
        IF V_FLAG=0 THEN
           EXECUTE IMMEDIATE V_SQL;
        ELSE
           EXECUTE IMMEDIATE 'DROP TABLE BI_ZJ_ZJGJ';
           EXECUTE IMMEDIATE V_SQL;
        END IF;

    碰到一个存储过程里面要使用多张临时表的时候就要多次重复粘贴该代码了,那为什么不将创建临时表的语句独立出来形成函数,然后在存储过程里面调用呢?

    因此建立一个BI_TEMP_TAB的函数,接收建表语句V_SQL和表名V_NAME,返回一个布尔值表示临时表创建成功。

    CREATE OR REPLACE FUNCTION BI_TEMP_TAB(V_SQL VARCHAR2,V_NAME VARCHAR2)
           RETURN BOOLEAN
    AS
           V_FLAG VARCHAR(10);
           V_OK BOOLEAN;
    BEGIN
           SELECT COUNT(1) INTO V_FLAG FROM USER_TABLES WHERE TABLE_NAME=V_NAME;
           V_OK:=True;
                  IF V_FLAG=0 THEN
                     EXECUTE IMMEDIATE V_SQL;
                     RETURN V_OK;
                  ELSE
                     EXECUTE IMMEDIATE 'DROP TABLE '||V_NAME;
                     EXECUTE IMMEDIATE V_SQL;
                     RETURN V_OK;
                   END IF;
    END;

    在存储过程中需要创建临时表的时候就直接调用该函数:

        V_SQL:='CREATE TABLE BI_ZJ_ZJCFB AS
                SELECT C.ZJZH_ZHBH,C.ZJZH_ZHNM,C.ZJZH_MC,C.ZJZH_ZHZ,E.ZJZHZ_MC,
                C.ZJZH_XZBH,D.ZJZHXZ_XZMC,C.ZJZH_DWBH,A.CODE,A.NAME
                FROM CODEITEMS A,BANKS B,ZJZH C,ZJZHXZ D,ZJZHZ E
                WHERE A.CODE=B.BANKTYPE
                AND   B.BANKID=C.ZJZH_BANKID
                AND   C.ZJZH_XZBH=D.ZJZHXZ_XZBH
                AND   C.ZJZH_ZHZ=E.ZJZHZ_ZHZBH
                AND   A.SETID=''A009''
                AND   C.ZJZH_XZBH<>''04''
                ORDER BY C.ZJZH_DWBH';
    
        V_OK:=BI_TEMP_TAB(V_SQL,'BI_ZJ_ZJCFB');
    这样就简化了临时表的创建过程。
    展开全文
  • 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
    
    展开全文
  • -=-=-=-=-=-=-=-=方法被调用-=-=-=-=-=-=-=-=-= function JudgeExist(p_budgetid in varchar2) return number is v_count number(2); begin select count(1) into v_count from project_budget ...
  • 1:编写简单函数:(通过return关键字返回结果集) create or replace function fun_add(p1 number ,p2 number)  return number  as begin  return p1+p2; end; 2.MyBatis的xml文件(对于返回值为一般数据类型...
  • 本文实例讲述了Python使用cx_Oracle调用Oracle存储过程的方法。分享给大家供大家参考,具体如下: 这里主要测试在Python中通过cx_Oracle调用PL/SQL。 首先,在数据库端创建简单的存储过程。 create or replace ...
  • 2017年05月11日 21:03:18 彖爻之辞 阅读数:1091 标签: oracle存储 更多 个人分类: --------1.1 ORACLE 具体过程如下: CREATE TABLE STOCK_PRICES( RIC VARCHAR(6) PRIMARY KEY, PRICE NUMBER(7,2), ...
  • -- 存储过程 create or replace procedure mytestddd(p_startDate in VARCHAR) as cursor cur_jg is ...求问大神 为什么sql执行的时候 就可以查出表中的数据 但是我用存储过程调用带参数的视图的时候 就查不到呢
  • oracle 存储过程和函数调用方法

    万次阅读 2011-01-09 22:11:00
    存储过程(PROCEDURE) 使用过程, 不仅可以简化客户端应用程序的开发和维护,而且可以提高应用程序的运行性能. CREATE [OR REPLACE] PROCUDURE procedure_name (arg1 [model1] datatype1, arg2...
  • Oracle存储过程及调用

    2020-12-16 01:18:05
    Oracle存储过程语法 Oracle的存储过程语法如下: create procedure 存储过程名称(随便取) is 在这里可以定义常量、变量、游标、复杂数据类型这里可以定义变量、常量 begin 执行部分 end; (2)带参数的存储...
  • oracle创建有返回值的函数调用函数 1 创建调用只有输入参数的函数 create or replace function fun_test_1(param1 in number,param2 in number) return number as begin if param1>param2 then return ...
  • 一、oracle存储过程的创建语法与示例 1、基本语法 create or replace procedure 存储过程名称 ( 参数别名 in 参数类型,(in为入参) 参数别名 in 参数类型,(in为入参) 参数别名 in 参数类型,(in为入参) 参数...
  • oracle执行存储过程调用http请求

    千次阅读 2020-09-22 16:54:49
    技术难点:公司代码封闭 无法改动 能改动的只有存储过程 公司说没办法调用其他的服务 导致操作完系统没办法做消息推送给其他公司 我在网上看到有oracle调用http请求的文章 所以自己实践一下 查看到百度很多的博客都...
  • 主要介绍了python读取oracle函数返回值的相关资料,感兴趣的小伙伴们可以参考一下
  • Oracle之存储过程和存储函数

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

    千次阅读 2018-07-06 10:55:06
    项目.Net MVC5的,在这里面调用Oracle存储过程,在这做个记录:1、Oracle中的存储过程create or replace procedure PROC_HISTASKBYUSERID(curruserid in varchar2,queryuserid in varchar2,typeNum in integer, ...
  • PL/SQL中的过程和函数(通常称为子程序)是PL/SQL块的一种特殊的类型,这种类型的子程序可以以编译的形式存放在数据库中,并为后续的程序块调用。 相同点: 完成特定功能的程序 不同点:是否用return语句返回值。 ...
  • C#调用oracle存储过程的通用方法 C#调用oracle存储过程的通用方法
  • NULL 博文链接:https://fengtiejun.iteye.com/blog/1603851
  • public class OracleDemo { @Test public void javaCallOracle() throws Exception { Class.forName("oracle.jdbc.driver.OracleDriver"); Connection connection = DriverManager.getCon...
  • 指存储在数据库中供所有用户程序调用的子程序叫存储过程、存储函数。 创建存储过程 用CREATE PROCEDURE命令建立存储过程。 语法: create [or replace] procedure 过程名(参数列表) as PLSQL子程序体; --给指定...
  • Oracle创建和调用存储过程,函数,视图

    千次阅读 2017-11-29 09:33:17
    【1】Oracle创建和调用存储过程 1:写一个简单的例子删除三级级联 1)create or replace procedure ww_procedure_servicecheck (V_ID IN NUMBER)-- 定义输入变量 IS begin  DELETE FROM ww_mt_index_dt WHERE ...
  • 本文主要介绍存储过程和存储函数的简单使用方法,例如创建及调用方式及其在应用程序中的使用方法,文中用到的光标和包的相关知识将在下篇文章中介绍。
  • java调用oracle存储过程或者函数
  • ![图片说明](https://img-ask.csdn.net/upload/201712/15/1513318909_681149.png) 这个是已经写好的函数,两个参数。 我应该如何在mybtis里面写,以及在java代码里面写

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 80,768
精华内容 32,307
关键字:

oracle存储函数调用