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函数的过程与调用存储过程类似,但创建CallableStatement时的SQL语句略有不同。由于函数会返回一个值,所以格式通常是`{? = call function_name(?, ?, ...)}`。在执行后,通过`CallableStatement....
"Oracle触发器调用存储过程" Oracle触发器可以调用存储过程,以实现业务逻辑的自动化执行。然而,在触发器中调用存储过程时,需要注意事务的隔离性,以避免出现锁定和死锁的问题。Oracle自治事务(Autonomous ...
本文实例讲述了Python使用cx_Oracle调用Oracle存储过程的方法。分享给大家供大家参考,具体如下: 这里主要测试在Python中通过cx_Oracle调用PL/SQL。 首先,在数据库端创建简单的存储过程。 create or replace ...
调用存储过程如下: ```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...
- 如果连接成功,则通过`ADOStoredProc1`组件调用存储过程`pkg_test.get`。 - 创建输入参数`p1`,并为其赋值1。 - 最后,执行存储过程。 通过以上步骤,我们可以在Delphi中成功调用Oracle的存储过程,并获取其...
例如,调用存储过程时,可以将相关操作包裹在Transaction中,以便在出现错误时能够回滚事务。 总之,通过Hibernate的Query接口,我们可以方便地调用Oracle的存储过程和函数,实现复杂的业务逻辑。结合源码和数据库...
综上所述,Oracle调用存储过程涉及到许多方面,从创建、调用到参数管理和异常处理,都需要对Oracle的PL/SQL语法和数据库管理有深入理解。通过熟练掌握这些知识点,开发者可以更有效地利用存储过程来提升应用程序的...
在学习和使用Oracle函数和存储过程时,建议从以下几个方面入手: 1. 熟悉基本的SQL语法和操作,这是使用函数和存储过程的前提。 2. 精读Oracle帮助文档,理解每个函数的用法和存储过程的结构。 3. 练习编写简单的...
### Oracle存储过程、函数与DBLink详解 #### 一、Oracle存储过程简介 在Oracle数据库中,存储过程是一种预编译好的SQL代码集合,它可以接受输入参数、返回单个值或多个值,并能够执行复杂的数据库操作。存储过程...
在压缩包中,"oracle函数大全及存储过程语法"文档和CHM文件可能详细列出了Oracle的各类函数,并提供了存储过程的创建、调用和管理示例。通过学习这些资料,你可以掌握如何有效地利用函数和存储过程来提升Oracle...
2. **调用存储过程**:使用`EXECUTE`关键字或直接在PL/SQL块中调用,如: ```sql DECLARE result VARCHAR2(100); BEGIN my_procedure(123, result); DBMS_OUTPUT.PUT_LINE(result); END; ``` **二、Oracle...
- `exesyscommand.jsp`: 这看起来是一个Java Servlet,可能是用于通过Web接口与数据库交互,调用存储过程执行批处理脚本。 - `PR_OTHER_SYSTEM_DATA_IMPORT.prc`: 这可能是一个存储过程,用于导入其他系统数据,它...
调用存储过程: ```java Map, Object> params = new HashMap(); params.put("id", id); sqlSession.execute("updateEmployeeStatus", params); String status = (String) params.get("status"); ``` 5. **...
本资源"oracle函数大全及存储过程语法.rar"显然是一个关于Oracle函数和存储过程的详细指南,涵盖了各种常用和高级的函数以及存储过程的编写和使用方法。 一、Oracle函数 Oracle提供了丰富的内置函数,包括数值函数...
在实际应用中,你可以通过调用`EXECUTE`命令或者在PL/SQL块中调用存储过程来执行它。例如: ```sql EXEC my_procedure(101); ``` 了解并熟练运用Oracle函数和存储过程对于任何Oracle数据库管理员或开发者来说都是...
2. 提高性能:多次调用存储过程比单次执行多条SQL更高效,因为解析和编译只在首次运行时进行。 3. 安全性:存储过程可以限制用户直接访问表,通过权限控制来保护数据。 4. 代码重用:存储过程可以被多个应用程序...