`
cbfmai
  • 浏览: 40741 次
  • 性别: Icon_minigender_1
  • 来自: 衡阳
社区版块
存档分类
最新评论

调用存储过程

阅读更多
调用存储过程的几种方法
存储过程如下:
CREATE OR REPLACE PACKAGE relationOFowner AS
       PROCEDURE SBowner(GC_OID IN NUMBER,ERRFID OUT VARCHAR2);
       FUNCTION ISowner(SBFID IN NUMBER,STR IN VARCHAR2) RETURN NUMBER;
END;
/
CREATE OR REPLACE PACKAGE BODY relationOFowner as

  -- 判断是否正确建立从属关系的函数
  FUNCTION ISowner(SBFID IN NUMBER,STR IN VARCHAR2) RETURN NUMBER
  IS
  COUS NUMBER;
  NUMS NUMBER;
  OW NUMBER;
  strsql varchar2(500);
  
  type type_cur is ref cursor;
  c1 type_cur;
  BEGIN
       SELECT COUNT(*) INTO COUS FROM B$COMMON_N WHERE G3E_FID=SBFID;
       IF COUS>1 THEN -- 判断是否跟正确的设备建有从属关系
          strsql :='select COUNT(*) from b$common_n where g3e_id in (
           select owner1_id from b$common_n where g3e_fid =' || SBFID || ' AND SUBSTR(LTT_STATUS,1,1)<>''I'' AND LTT_STATUS<>''DELETE'' AND LTT_ID<>0 
           union select owner2_id from b$common_n where g3e_fid =' || SBFID || ' AND SUBSTR(LTT_STATUS,1,1)<>''I'' AND LTT_STATUS<>''DELETE'' AND LTT_ID<>0) 
           and g3e_fno in ' || STR || '';
       ELSE
           strsql := 'select COUNT(*) from b$common_n where g3e_id in (
           select owner1_id from b$common_n where g3e_fid =' || SBFID || ' union 
           select owner2_id from b$common_n where g3e_fid =' || SBFID || ' ) 
           and g3e_fno in ' || STR || '';
       END IF;
       execute immediate strsql;
       open c1 for strsql;
          fetch c1 into NUMS;
       close c1; 
      
       IF NUMS>0 THEN  --有从属关系
          OW := 1; 
       ELSE  --没有从属关系
          OW := 0;
       END IF;
       RETURN OW;
  END;
  
  -- 配网需要调用的从属关系的判断的过程,返回错误数据给配网
  PROCEDURE SBowner(GC_OID IN NUMBER,errFID OUT VARCHAR2)
  IS
  SQLSTR varchar2(100);
  COU NUMBER;
  AZWZ VARCHAR2(50);
  FIDSTR VARCHAR2(200);
  
  --定义游标,查出该竣工单所编辑的设备
  cursor c_emp is 
         select distinct g3e_fid,g3e_fno from CV_GG_WM_SMZQ_DZLB  where gcbh=GC_OID and SUBSTR(ltt_STATUS,1,1)<>'I' 
         AND G3E_FNO IN (146,148,143,173,147,144,90,180,39) 
         and g3e_fid not in (select g3e_fid from CV_GG_WM_SMZQ_DZLB where gcbh=GC_OID and ltt_status='DELETE')
         order by g3e_fid;
  BEGIN   
       FIDSTR:=NULL;
       --循环编辑设备结果集
       FOR R_EMP IN C_EMP LOOP
           --判断从属关系
          IF R_EMP.G3E_FNO = 146 THEN  --10kV开关  
             select COUNT(*) INTO COU from b$GG_PD_ZFHWG_N where g3e_fid =R_EMP.G3E_FID; -- dlt=''
             IF COU>1 THEN
                 select DLT INTO AZWZ from b$GG_PD_ZFHWG_N where g3e_fid =R_EMP.G3E_FID AND SUBSTR(LTT_STATUS,1,1)<>'I' AND LTT_STATUS<>'DELETE' AND LTT_ID<>0;
             ELSE
                 select DLT INTO AZWZ from b$GG_PD_ZFHWG_N where g3e_fid =R_EMP.G3E_FID;
             END IF;
             IF AZWZ='户外' THEN  -- "安装位置"为"户外"的开关从属于电杆
                 SQLSTR := '(201)';
             END IF;
             IF AZWZ='户内' THEN  -- "户内"则从属于电房或箱式设备
                 SQLSTR := '(163,142,149)';
             ELSE
                 SQLSTR := '(0)';
             END IF;
             
          END IF;
          
          IF R_EMP.G3E_FNO = 148 THEN  --变压器,跟电房、箱式设备、电杆建从属关系
             SQLSTR := '(163,142,149,201)';
          END IF;
          
          -- 站房母线、站房接地刀闸、站房电缆头、站房引线、DTU  (跟电房、箱式设备建从属关系)
          IF R_EMP.G3E_FNO = 143 or R_EMP.G3E_FNO = 173 or R_EMP.G3E_FNO = 147 or R_EMP.G3E_FNO = 144 or R_EMP.G3E_FNO = 90 THEN 
             SQLSTR := '(163,142,149)';
          END IF;

          IF R_EMP.G3E_FNO = 180 or R_EMP.G3E_FNO = 39 THEN  -- FTU、CT (跟开关建从属关系)
             SQLSTR := '(146)';
          END IF;
          -- 耦合器(还没建,暂时没有这个设备)
          IF SQLSTR<>'(0)' THEN
              IF ISOWNER(R_EMP.G3E_FID,SQLSTR)=0 THEN --没有建立正确的从属关系
                  IF FIDSTR IS NULL THEN
                     FIDSTR:=R_EMP.G3E_FID;
                  ELSE
                     FIDSTR:=FIDSTR || ',' || R_EMP.G3E_FID;
                  END IF;
                  --RAISE_APPLICATION_ERROR (-20001, '开关' || R_EMP.G3E_FID || ',请建立正确的从属关系在会审!');
              END IF;
          END IF;
             
       END LOOP;
       IF FIDSTR IS NOT NULL THEN
          ERRFID:='以下设备没有建立正确的从属关系:' || FIDSTR;
       ELSE
           ERRFID:=NULL;
       END IF;
  END;
END relationOFowner;
/



1、jdbc调用

public class SpringStore extends JdbcDaoSupport {

	/**
	 * 方法说明:调用GIS的存储过程
	 * 
	 * @param oid 是配网单的OID,需要传入参数。
	 * @return String  返回的字符串有值,就不让通过审核,给出提示。返回字符串为空,就正常。
	 */
	public String checkEquipmentGISOFowner(Long oid) throws Exception {
		CallableStatement proc = null;
		String result;
		try {
			proc = this.getDataSource().getConnection().prepareCall(
					"call RELATIONOFOWNER.SBowner(?,?)");
			proc.setLong(1, oid); // 传入参数
			proc.registerOutParameter(2, Types.VARCHAR);  // 返回值
			proc.execute();
			result = proc.getString(2);
			System.out.println(result);
			return result;
		} catch (RuntimeException e) {
			e.printStackTrace();
			return "";
		}

	}
}


分享到:
评论

相关推荐

    Informatica调用存储过程图文流程

    Informatica调用存储过程图文流程 Informatica 是一款功能强大的数据集成工具,能够帮助用户快速、可靠地集成各种数据源。调用存储过程是 Informatica 中的一种常用功能,下面将详细介绍 Informatica 调用存储过程...

    pb调用存储过程

    以下是关于Pb调用存储过程以及存储过程创建的详细知识: 首先,`Pb调用存储过程`通常是通过Database窗口或者DataWindow对象来实现的。在Pb中,我们可以通过以下步骤调用存储过程: 1. **声明存储过程**:在Pb的...

    java 调用存储过程

    在Java编程中,调用存储过程是连接数据库并执行预定义SQL代码的一种常见方式。存储过程是由数据库管理系统(如MySQL, Oracle, SQL Server等)编译并存储的一组操作,可以包含复杂的逻辑、条件判断、循环等,提高数据...

    java调用存储过程(含out参数)

    3. **准备CallableStatement**:对于调用存储过程,我们需要使用`CallableStatement`对象,它是`PreparedStatement`的子类,专门用于调用数据库存储过程。通过`Connection`对象的`prepareCall()`方法创建。 4. **...

    Java调用存储过程--传入集合参数

    ### Java调用存储过程——传入集合参数:深入解析与实践 #### 核心知识点概览 在Java应用中,调用数据库存储过程时,往往需要处理复杂的参数传递,特别是当参数为集合类型时,这一过程变得更加具有挑战性。本文将...

    C#调用oracle方法(包括调用存储过程)

    ### C#调用Oracle方法(包括调用存储过程) 在.NET框架中,使用C#语言进行数据库操作是一项常见的任务。本文将详细介绍如何使用C#语言连接Oracle数据库,并演示如何调用Oracle存储过程,特别是带有输出参数的情况。...

    存储过程- 06.在应用程序中调用存储过程

    本主题将深入探讨如何在应用程序中调用存储过程,以充分利用这些优点。 1. **存储过程的优点** - **性能优化**:由于存储过程在首次创建时被编译,之后的执行只需调用已编译的对象,减少了解析和编译的时间。 - *...

    sqlhelper调用存储过程.rar

    本文将深入探讨如何使用SqlHelper调用存储过程,包括存储过程的基础概念、SqlHelper的基本用法以及具体步骤,以帮助开发者更高效地进行数据库操作。 一、存储过程基础 存储过程是预编译的SQL语句集合,存储在数据库...

    JDBC调用存储过程

    本文将详细讲解如何使用JDBC来调用存储过程,以实现数据的增删改查操作。 首先,理解存储过程是数据库中的一个重要概念。存储过程是一组预先编译好的SQL语句集合,它可以包含控制流语句、输入/输出参数,甚至可以有...

    ibatIS调用存储过程

    ibatIS调用存储过程是数据库操作中常见的一种技术,特别是在复杂的业务逻辑处理或数据批量操作时,存储过程能够提供更高的效率和更好的性能。本文将深入探讨如何在ibatIS框架中调用存储过程,以及涉及到的相关知识点...

    hibernate调用存储过程

    hibernate调用存储过程 hibernate调用存储过程 hibernate调用存储过程 hibernate调用存储过程 hibernate调用存储过程 hibernate调用存储过程 hibernate调用存储过程

    java调用存储过程

    java,调用存储过程java,调用存储过程java,调用存储过程java,调用存储过程java,调用存储过程java,调用存储过程java,调用存储过程java,调用存储过程java,调用存储过程java,调用存储过程java,调用存储过程

    NHibernate调用存储过程全集,值.

    **NHibernate调用存储过程全集** 在关系型数据库中,存储过程是预编译的SQL语句集合,可以提高数据库操作的效率和安全性。在使用ORM(对象关系映射)框架如NHibernate时,虽然主要目的是通过面向对象的方式操作...

    java调用存储过程实例

    在IT领域,特别是数据库操作与Java编程的交集部分,调用存储过程是常见的需求之一。根据提供的文件信息,我们可以深入解析如何在Java中通过JDBC(Java Database Connectivity)调用Oracle数据库的存储过程。 ### ...

    VB6.0 调用存储过程的例子(方法一)

    ### VB6.0调用存储过程的例子(方法一) 在Visual Basic 6.0中,调用数据库中的存储过程是一项非常实用的功能。本篇将详细解释一个具体的示例,通过VB6.0来调用一个名为`ADOTestRPE`的存储过程,并测试其返回值、...

    oracle触发器调用存储过程

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

    金蝶K3插件开发调用存储过程

    金蝶K3插件开发调用存储过程

Global site tag (gtag.js) - Google Analytics