- 浏览: 313218 次
- 来自: ...
文章分类
最新评论
-
羊肉小笼包:
非常感谢,用第三种方式解决了service实现类里面装载不了d ...
autowire异常的三个情况 -
Rainyn:
碰到了另外一种情况。代码里有地方用到了dubbo的Servic ...
autowire异常的三个情况 -
tsinglongwu:
2.3都碰到过。但是今天发现一个新原因,就是mybatis忘了 ...
autowire异常的三个情况 -
cuqing:
@Servicepublic class RacePlanDa ...
autowire异常的三个情况 -
星丨澈:
帮了大忙了,用第三种方法解决了
autowire异常的三个情况
过程和函数
a.将过程的执行权限授予其他用户:GRANT EXECUTE ON find_emp TO MARTIN;
b.删除过程:DROP PROCEDURE find_emp
c.函数的调用:SELECT fun_hello FROM DUAL;
d.查看所有的过程:select object_name,created,status from user_objects
where object_type in ('PROCEDURE','FUNCTION')
e.查看过程源码 select text from user_source where name='procedure_name';
1.在命令窗口中调用有一个in参数,一个out参数的存储过程
CREATE OR REPLACE PROCEDURE FIND_EMP(AID in CHAR,res out varchar2)
AS
ENAME DEPTO.NAME%TYPE;
BEGIN
SELECT NAME INTO ENAME from bankaccount WHERE ID=AID;
res:='姓名是:'||ename;
EXCEPTION
WHEN NO_DATA_FOUND THEN
res:='not found';
END FIND_EMP;
调用:
VAR SSS VARCHAR2;
EXECUTE FIND_EMP('1111',:SSS);
用java调用:
import java.sql.CallableStatement;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Types;
public class Sub
{
static Connection co=null;
public static Connection connection()
{
try
{
Class.forName("oracle.jdbc.driver.OracleDriver");
co=DriverManager.getConnection
("jdbc:oracle:thin:@192.168.0.111:1521:emp","scott","admin");
}catch(Exception e)
{
System.out.println(e);
}
return co;
}
public void query() throws Exception
{
Connection conn=connection();
CallableStatement c=conn.prepareCall("{call FIND_EMP(?,?)}");
c.registerOutParameter(2,Types.VARCHAR);
c.setString(1,"11111");
c.execute();
String bal=c.getString(2);
System.out.println(bal);
conn.close();
}
public static void main(String args[]) throws Exception
{
Sub f=new Sub();
f.query();
}
}
2.在java中调用pl/sql函数例子
函数:
CREATE OR REPLACE FUNCTION query3(id1 in char) RETURN VARCHAR2
AS BAL VARCHAR2(20);
A_ID CHAR(5);
BEGIN
SELECT BALANCE INTO A_ID FROM BANKACCOUNT where ID=id1;
BAL:='您的余额为'||A_ID;
RETURN BAL;
END query3;
调用:
import java.sql.CallableStatement;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Types;
class Function
{
static Connection co=null;
public static Connection connection()
{
try
{
Class.forName("oracle.jdbc.driver.OracleDriver");
co=DriverManager.getConnection
("jdbc:oracle:thin:@192.168.0.111:1521:emp","scott","admin");
}catch(Exception e)
{
System.out.println(e);
}
return co;
}
public void query() throws Exception
{
Connection conn=connection();
CallableStatement c=conn.prepareCall("{? = call QUERY3(?)}");
c.registerOutParameter(1,Types.VARCHAR);
c.setString(2,"11111");
c.execute();
String bal=c.getString(1);
System.out.println(bal);
conn.close();
}
public static void main(String args[]) throws Exception
{
Function f=new Function();
f.query();
}
}
3.调用一个in参数,一个out参数的另一种方法
CREATE OR REPLACE PROCEDURE TEST(VAL1 IN VARCHAR2,VAL2 OUT NUMBER) IS
IDD NUMBER;
BEGIN
SELECT ID INTO IDD FROM DEPTO WHERE ADDRESS=VAL1;
IF SQL%FOUND THEN
VAL2:=300;
END IF;
END;
调用:
DECLARE
VA1 DEPTO.ADDRESS%TYPE:='dalu';
VA2 NUMBER;
BEGIN
TEST(VA1,VA2);
DBMS_OUTPUT.PUT_LINE(VA2);
END;
4.利用函数/过程返回结果集.
利用函数:
定义包:create or replace package pkg_resultset
as
type yourtype is ref cursor;
function operation_resultset(phonenumber varchar2) return yourtype;
end pkg_resultset;
定义包体:
create or replace package body pkg_resultset
as
function operation_resultset(phonenumber varchar2) return yourtype
is
yourcur yourtype;
begin
open yourcur for SELECT a.operation_name, c.charge_kind, c.charge FROM
t_phone_operation a,t_phone_operation_charge b, t_cost c
where a.operation_id=b.operation_id and b.phone_num=phonenumber and
b.operation_id=c.operation_id;
return yourcur;
end operation_resultset;
end pkg_resultset;
在java中调用:
String phoneNum = querybuniessForm.getPhonenumber();
Connection conn=ConnectDataBase.connection();
ActionForward mg=null;
CallableStatement cs=null;
try
{
cs=conn.prepareCall("{call queryphonenumber(?,?)}");
cs.registerOutParameter(2,Types.VARCHAR);
cs.setString(1,phoneNum);
cs.execute();
String res=cs.getString(2);
ActionErrors errors=new ActionErrors();
cs.close();
ResultSet rs=null;
if(res.equals("无此手机号"))
{
errors.add("notfoundnumber",new ActionError("notfoundnumber"));
this.saveErrors(request,errors);
mg=mapping.getInputForward();
}else
{ errors.add("foundnumber",new ActionError("foundnumber"));
this.saveErrors(request,errors);
mg=mapping.getInputForward();
CallableStatement cs2=null;
cs2=conn.prepareCall("{?=call pkg_resultset.operation_resultset(?)}");
cs2.registerOutParameter(1,OracleTypes.CURSOR);
cs2.setString(2,phoneNum);
cs2.execute();
rs = ((OracleCallableStatement)cs2).getCursor(1);
while(rs.next())
{
System.out.print(rs.getString(1)+" ");//输出第一个字段
System.out.print(rs.getString(2)+" ");//输入第二个字段
System.out.print(rs.getString(3)+" ");
}........
利用过程:
定义包:
create or replace package pkg_resultset
as
type yourtype is ref cursor;
function operation_resultset(phonenumber varchar2) return yourtype;
end pkg_resultset;
定义包体:
create or replace package body wyj
as
PROCEDURE wyj1(phoneNum in varchar2,res OUT res1)
is
BEGIN
OPEN res FOR
SELECT a.operation_name, c.charge_kind, c.charge FROM
t_phone_operation a,t_phone_operation_charge b, t_cost c
where a.operation_id=b.operation_id and b.phone_num=phoneNum and
b.operation_id=c.operation_id;
END wyj1;
end wyj;
在java中调用:同上....
5.在java中调用存储过程返回结果集,并在jsp页面中显示出结果的方法.(以struts工程为例)
主要思路:在包内定义一个funcion或procudure,返回类型为游标,然后在java中得到结果集并遍历他们
以得到其中字段的结果,把他们放到一个bean中,并把bean放到ArrayList对象中,最后在jsp页面中用struts
标签得到结果.
在oracle中定义上述4中的包和包体,"pkg_resultset",在Action这样使用:
......
errors.add("foundnumber",new ActionError("foundnumber"));
this.saveErrors(request,errors);
mg=mapping.getInputForward();
CallableStatement cs2=null;
cs2=conn.prepareCall("{?=call pkg_resultset.operation_resultset(?)}");
cs2.registerOutParameter(1,OracleTypes.CURSOR);
cs2.setString(2,phoneNum);
cs2.execute();
rs = ((OracleCallableStatement)cs2).getCursor(1);
ArrayList list = new ArrayList();
while(rs.next())
{
String operationName = rs.getString(1);
String operationType = rs.getString(2);
String operationCharge = rs.getString(3);
System.out.println(operationName);
System.out.println(operationType);
System.out.println(operationCharge);
GetResultList resultList=new GetResultList //见下面的bean类
(operationName,operationType,operationCharge);
list.add(resultList);
}
request.setAttribute("GetResultLists",list);
//下面是一个bean类
package com.penguin.bean;
public class GetResultList
{
private String operationName;
private String operationType;
private String operationCharge;
public GetResultList(String operationName,String operationType,String operationCharge)
{
this.operationCharge=operationCharge;
this.operationName=operationName;
this.operationType=operationType;
}
public String getOperationCharge() {
return operationCharge;
}
public void setOperationCharge(String operationCharge) {
this.operationCharge = operationCharge;
}
public String getOperationName() {
return operationName;
}
public void setOperationName(String operationName) {
this.operationName = operationName;
}
public String getOperationType() {
return operationType;
}
public void setOperationType(String operationType) {
this.operationType = operationType;
}
}
然后在jsp页面中用标签:
<%@ page language="java" pageEncoding="UTF-8"%>
<%@ taglib uri="http://jakarta.apache.org/struts/tags-bean
" prefix="bean" %>
<%@ taglib uri="http://jakarta.apache.org/struts/tags-html
" prefix="html" %>
<%@ taglib uri="http://jakarta.apache.org/struts/tags-logic
" prefix="logic" %>
<%@ taglib uri="http://jakarta.apache.org/struts/tags-tiles
" prefix="tiles" %>
<%@ taglib uri="http://jakarta.apache.org/struts/tags-template
" prefix="template" %>
<%@ taglib uri="http://jakarta.apache.org/struts/tags-nested
" prefix="nested" %>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html:html locale="true">
<head>
<html:base />
<title>query.jsp</title>
<meta http-equiv="pragma" content="no-cache">
<meta http-equiv="cache-control" content="no-cache">
<meta http-equiv="expires" content="0">
<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
<meta http-equiv="description" content="This is my page">
</head>
<body>
<html:form action="querybuniess.do" method="post" focus="login">
<table >
<tr>
<td>phone number:</td>
<td><html:text property="phonenumber" /></td>
<td><html:submit value="搜索" /></td>
<td><font color="red"><html:errors property="phonenumbererr"/></font></td>
<td><font color="red"><html:errors property="notfoundnumber"/></font></td>
<td><FONT color="red"><html:errors property="foundnumber"/></FONT></td>
</tr>
</table>
<br>
<br>
<logic:present name="GetResultLists" scope="request">
<table cellspacing="1" border="1" width="500" >
<tr>
<th align="center" >栏目名</th>
<th align="center" >资费类型</th>
<th align="center" >金额</th>
</tr>
<logic:iterate id="GetResultList" name="GetResultLists">
<logic:present name="GetResultList">
<tr>
<td align="center" ><bean:write name="GetResultList" property="operationName"/></td>
<td align="center" ><bean:write name="GetResultList" property="operationType"/></td>
<td align="center" ><bean:write name="GetResultList" property="operationCharge"/></td>
</tr>
</logic:present>
</logic:iterate>
</logic:present>
</table>
</html:form>
</body>
</html:html>
发表评论
-
java.lang.LinkageError: JAXB 2.0 API is being loaded from the bootstrap classloa
2014-03-11 16:14 1114Exception in thread "main ... -
spring可以方便的访问oracle的存储过程、函数
2010-08-05 12:28 1156spring文档举了一个访问sysdate的例子,它不需要输入 ... -
SQL面试题[经典收录]
2010-06-23 16:35 2225SQL面试题(1) create table testt ... -
java反射--如何改变private中的变量的值
2010-04-15 17:08 11488class DemoTest{ private Str ... -
jaxb2.0入门实例(java -> xml)
2010-04-09 15:54 2972下载地址: https://jaxb.dev.java.n ... -
JSON-lib的应用
2010-03-31 11:45 1126Json必需的包 commons-httpclient-3. ... -
java面试笔试题大汇总
2010-01-12 16:34 995java面试笔试题大汇总 ... -
java代码优化编程
2009-11-13 11:38 858可供程序利用的资源(内存、CPU时间、网络带宽等)是有限的,优 ... -
springinaction源程序3
2008-06-02 12:25 921spring -
springinaction源程序2
2008-06-02 12:24 1023spring -
springinaction源程序
2008-06-02 11:54 977spring -
中文比较器
2007-02-13 18:18 1274自己写了两种方法的中文比较器, private class ... -
jasperReport(转载)
2007-01-16 11:37 3745JasperReport和iReport是不错的Java报表工 ...
相关推荐
调用Oracle函数的过程与调用存储过程类似,但创建CallableStatement时的SQL语句略有不同。由于函数会返回一个值,所以格式通常是`{? = call function_name(?, ?, ...)}`。在执行后,通过`CallableStatement....
存储过程是一组预编译的SQL语句和PL/SQL代码,存储在数据库服务器上,可以按需调用。存储过程的优点包括提高性能、减少网络流量、增强安全性以及实现模块化编程。 1. **创建存储过程**:使用`CREATE PROCEDURE`语句...
### Java中调用Oracle的存储过程和函数 在Java应用程序中调用Oracle数据库中的存储过程或函数是一项常见的任务。这不仅能够提高代码的执行效率,还可以有效地管理事务处理,确保数据的一致性和完整性。本文将详细...
本文介绍了Java调用Oracle存储过程返回结果集Record和Cursor的相关知识点,包括创建Type、PACKAGE和PROCEDURE,Java代码中调用存储过程,并获取结果集。这些知识点对深入了解Oracle存储过程和Java调用Oracle存储过程...
为了更好地管理和处理数据,通常需要在Java程序中调用Oracle数据库中的存储过程或函数。本文将详细介绍如何通过Java来调用Oracle数据库中的函数,并特别关注带有不同类型的输入(in)、输出(out)及输入输出(in/...
- **复用性**:存储过程和函数可以被多个应用程序或存储过程调用,从而提高代码的复用性和维护性。 #### 2. 存储过程的优点 - **远程访问**:由于存储过程驻留在数据库服务器上,因此可以从任何客户端进行访问。 - ...
本文主要介绍了Oracle存储过程的概念、创建和调用方法,以及如何使用DBLink实现跨库操作。存储过程提供了强大的数据库处理能力,而DBLink则使得不同数据库实例之间的交互变得更加方便和高效。掌握这些技术对于提高...
本篇文章将深入探讨如何使用Hibernate的Query接口来调用Oracle的存储过程和函数,以及提供相关的示例代码和数据库文件。 首先,让我们了解什么是存储过程和函数。存储过程是预编译的SQL语句集合,可以接受参数、...
首先,`Oracle存储过程`是一种预编译的SQL和PL/SQL代码集合,可以被多次调用以执行特定的任务。它们提高了性能,降低了网络流量,并简化了数据库管理。在存储过程中调用外部脚本可以扩展Oracle的功能,比如自动化...
### Oracle函数调用存储过程详解 #### 背景与目的 在开发Oracle应用程序时,经常需要使用到存储过程和函数。这两种类型的数据库对象各有优势,可以满足不同的业务需求。有时候,为了更好地组织代码和提高复用性,...
在“JAVA与存储过程.txt”文件中,可能包含了具体的示例代码,解释了如何在Java中调用Oracle存储过程和函数,以及如何处理输入和输出参数。这些示例可能涉及到了`Connection`, `PreparedStatement`, `ResultSet`等...
在Oracle数据库开发中,存储过程和函数以及PL/SQL语言是至关重要的组成部分。这篇内容将深入解析这些核心概念。 首先,我们来谈谈“存储过程”。存储过程是一组预编译的SQL语句,可以在数据库中保存并重复调用,以...
ORACLE 存储过程的异步调用 本文讨论了 ORACLE 存储过程的异步调用方法,旨在解决客户端长时间等待存储过程执行的问题。主要思路是使用 DBMS_JOB 包将主处理存储过程作为任务提交到任务队列中,并通过 DBMS_PIPE 包...
### Delphi调用Oracle的...总结来说,本文详细介绍了如何在Delphi中调用Oracle的存储过程,包括存储过程的创建、Delphi环境的配置以及具体的代码实现。这为开发者提供了一个实用的例子,以便更好地理解和掌握这一技术。
本文实例讲述了Python使用cx_Oracle调用Oracle存储过程的方法。分享给大家供大家参考,具体如下: 这里主要测试在Python中通过cx_Oracle调用PL/SQL。 首先,在数据库端创建简单的存储过程。 create or replace ...
在这个"Oracle存储过程函数生成DEMO"中,我们主要关注如何在Oracle数据库环境中设计、编写、测试以及调用存储过程和函数。下面将详细阐述相关知识点。 1. **存储过程**: - 存储过程是一组预先编译的SQL语句,存储...
在《ORACLE存储过程,函数,包,游标》这个文本文件中,可能包含了关于如何定义、调用和管理这些对象的示例代码和实践指导。通过阅读和理解这个文件,开发者能够深入了解Oracle数据库的动态编程能力,提升其在数据库...
在Oracle数据库中,存储过程、游标和函数是非常重要的组成部分,它们为数据库管理提供了强大的编程能力。通过学习这些概念,我们可以更加灵活地管理和操作数据库数据。 ##### 1.1 存储过程 存储过程是一组预先编译...
在Java中调用存储过程主要通过`CallableStatement`接口实现,它是`PreparedStatement`的子接口,专用于调用存储过程和函数。 以下是一个基本的步骤来调用Oracle存储过程: 1. **建立数据库连接**: 使用`...