`
wm920
  • 浏览: 80934 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

oracle 函数调用存储过程操作

 
阅读更多
create or replace function fun_plan_station_contrast(groupid varchar2)
  return number is
  tmp varchar2(200);
  mycur sys_refcursor;
  res number :=0;--不符合条件的记录条数
  type station_record is record(
  strCode varchar2(200),
  strName varchar2(200),
  planQuantity number(19,2),
  configStock number(19,2),
  configQuantity number(19,2),
  stockQuantity number(19,2)
  );--定义新类型来存放存储过程返回的结果

  tmp_record station_record;
begin
  tmp := 'call plan_station_contrast(:param1,:param2) ';
  execute immediate tmp using groupid,out mycur ;--调用存储过程

  --游标默认已打开,因为存储过程中是open refcursor for 
  if(mycur%isopen) then
    dbms_output.put_line('打开');
  else
    dbms_output.put_line('关闭');
  end if;

  loop
    fetch mycur into tmp_record;
    exit when mycur%notfound;
     if tmp_record.planQuantity<>tmp_record.configQuantity or tmp_record.stockQuantity<>tmp_record.configStock then
      res:=res+1;
    end if;
  end loop;
  
  close mycur;--关闭游标
  
  return res;
end fun_plan_station_contrast;

 

create or replace procedure plan_station_contrast(
 groupid in varchar2 ,--到站计划主表id,非空
 refCursor out sys_refcursor)
is
planDate  varchar2(6);--计划年月
deptCode  varchar2(10);--上报单位编码

begin
  select p.plan_date,p.dept_code into planDate,deptCode from p_station_group p where id=to_number(groupid);

 open refcursor for 'select nvl(station.oil_code,config.oil_code) oilCode,nvl(station.oil_name,config.oil_name) oilName
  ,nvl(station.planQuantity,0) planQuantity  --到站上报
  ,nvl(station.configStock,0)  configStock   --外采上报
  ,nvl(config.configQuantity,0) configQuantity --直炼配置
  ,nvl(config.stockQuantity,0) stockQuantity --外采配置
  
  from
  --到站计划
  (select p.oil_code,p.oil_name
          ,sum(plan_Quantity)-sum(special_Quantity) planQuantity 
          ,sum(stock_Quantity) configStock
    from
      (select oil_code,oil_name
         ,decode(special,''0'',nvl(train_quantity, 0) + nvl(ship_quantity, 0)+ nvl(pipeline_quantity, 0) +nvl(truck_quantity, 0),0)plan_Quantity
         ,decode(special,''1'',nvl(train_quantity, 0),0) special_Quantity
         ,decode(special,''2'',nvl(train_quantity, 0) + nvl(ship_quantity, 0)+ nvl(pipeline_quantity, 0) +nvl(truck_quantity, 0),0) stock_Quantity
      from p_station where sid = '||groupid||' 
    )p
  group by p.oil_code,p.oil_name) station
  full join
  --配置计划
  (
    select p.oil_code,p.oil_name
    ,sum(decode(a.dtype,''factory'',decode(a.f_type,1,p.plan_quantity,0),''stock'',0,p.plan_quantity)) configQuantity --配置量 
    ,sum(decode(a.dtype,''factory'',decode(a.f_type,1,0,p.plan_quantity),''stock'',p.plan_quantity,0)) stockQuantity --外采量 
    from p_disbtn p
    left outer join P_CONFIG_PLAN_FLOW f on p.flow_code=f.flow_code --关联配置计划流向
    left outer join acc_domain a on p.company_code=a.code 
    where bill_month='''||planDate||'''
    and (select status from p_disbtn_group where bill_month='''||planDate||''')=''2''
    and f.company_code='''||deptCode||'''
    and p.plan_quantity>0 
    group by p.oil_code,p.oil_name
  ) config
  on station.oil_code=config.oil_code ';
end plan_station_contrast;

 

分享到:
评论

相关推荐

    oracle函数调用存储过程

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

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

    调用Oracle函数的过程与调用存储过程类似,但创建CallableStatement时的SQL语句略有不同。由于函数会返回一个值,所以格式通常是`{? = call function_name(?, ?, ...)}`。在执行后,通过`CallableStatement....

    oracle触发器调用存储过程

    "Oracle触发器调用存储过程" Oracle触发器可以调用存储过程,以实现业务逻辑的自动化执行。然而,在触发器中调用存储过程时,需要注意事务的隔离性,以避免出现锁定和死锁的问题。Oracle自治事务(Autonomous ...

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

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

    如何调用oracle的函数、存储过程

    调用存储过程如下: ```sql DECLARE v_employee_name VARCHAR2(100); BEGIN GET_EMPLOYEE_DETAILS(123, v_employee_name); DBMS_OUTPUT.PUT_LINE('Employee Name: ' || v_employee_name); END; ``` 2. **PL...

    delphi调用Oracle的存储过程

    - 如果连接成功,则通过`ADOStoredProc1`组件调用存储过程`pkg_test.get`。 - 创建输入参数`p1`,并为其赋值1。 - 最后,执行存储过程。 通过以上步骤,我们可以在Delphi中成功调用Oracle的存储过程,并获取其...

    hibernate query调用oracle存储过程

    例如,调用存储过程时,可以将相关操作包裹在Transaction中,以便在出现错误时能够回滚事务。 总之,通过Hibernate的Query接口,我们可以方便地调用Oracle的存储过程和函数,实现复杂的业务逻辑。结合源码和数据库...

    oracle调用存储过程

    综上所述,Oracle调用存储过程涉及到许多方面,从创建、调用到参数管理和异常处理,都需要对Oracle的PL/SQL语法和数据库管理有深入理解。通过熟练掌握这些知识点,开发者可以更有效地利用存储过程来提升应用程序的...

    oracle oracle函数 存储过程

    在学习和使用Oracle函数和存储过程时,建议从以下几个方面入手: 1. 熟悉基本的SQL语法和操作,这是使用函数和存储过程的前提。 2. 精读Oracle帮助文档,理解每个函数的用法和存储过程的结构。 3. 练习编写简单的...

    oracle 存储过程 函数 dblink

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

    oracle 函数大全 存储过程语法

    在压缩包中,"oracle函数大全及存储过程语法"文档和CHM文件可能详细列出了Oracle的各类函数,并提供了存储过程的创建、调用和管理示例。通过学习这些资料,你可以掌握如何有效地利用函数和存储过程来提升Oracle...

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

    2. **调用存储过程**:使用`EXECUTE`关键字或直接在PL/SQL块中调用,如: ```sql DECLARE result VARCHAR2(100); BEGIN my_procedure(123, result); DBMS_OUTPUT.PUT_LINE(result); END; ``` **二、Oracle...

    Oracle存储过程调用bat批处理脚本程序

    - `exesyscommand.jsp`: 这看起来是一个Java Servlet,可能是用于通过Web接口与数据库交互,调用存储过程执行批处理脚本。 - `PR_OTHER_SYSTEM_DATA_IMPORT.prc`: 这可能是一个存储过程,用于导入其他系统数据,它...

    ibatis调用oracle的函数,存储过程的方法

    调用存储过程: ```java Map, Object&gt; params = new HashMap(); params.put("id", id); sqlSession.execute("updateEmployeeStatus", params); String status = (String) params.get("status"); ``` 5. **...

    oracle函数大全及存储过程语法.rar

    本资源"oracle函数大全及存储过程语法.rar"显然是一个关于Oracle函数和存储过程的详细指南,涵盖了各种常用和高级的函数以及存储过程的编写和使用方法。 一、Oracle函数 Oracle提供了丰富的内置函数,包括数值函数...

    oracle函数大全及存储过程语法 chm

    在实际应用中,你可以通过调用`EXECUTE`命令或者在PL/SQL块中调用存储过程来执行它。例如: ```sql EXEC my_procedure(101); ``` 了解并熟练运用Oracle函数和存储过程对于任何Oracle数据库管理员或开发者来说都是...

    oracle函数大全及存储过程语法

    2. 提高性能:多次调用存储过程比单次执行多条SQL更高效,因为解析和编译只在首次运行时进行。 3. 安全性:存储过程可以限制用户直接访问表,通过权限控制来保护数据。 4. 代码重用:存储过程可以被多个应用程序...

Global site tag (gtag.js) - Google Analytics