`
Sehoney
  • 浏览: 41300 次
  • 性别: Icon_minigender_1
  • 来自: 福建
社区版块
存档分类
最新评论

存储过程(Procedure)和函数(Function)及Java调用

阅读更多
存储过程(Procedure)
创建过程的语法:
CREATE [OR REPLACE] PROCEDURE
   <procedure name> [(<parameter list>)]
IS|AS
   <local variable declaration>
BEGIN
   <executable statements>
[EXCEPTION
   <exception handlers>]
END;
带输入输出参数
create or replace procedure user_pro(ssuser in varchar2,vname out varchar2)
as
v_name varchar2(30);
begin
      select t.name into v_name from t_user t where suser=ssuser;
      if v_name!='龚帅' then 
         vname:='龚帅';
      end if; 
end;

--执行过程
declare
v_str varchar2(30);
begin
      user_pro('test9',v_str);
      dbms_output.put_line(v_str);
end;


带游标的存储过程
create or replace procedure cursor_pro
is 
cursor user_cursor is select * from t_user;
begin
       for rs_row in user_cursor 
       loop
           dbms_output.put_line(rs_row.suser);
       end loop;
end;

declare
begin
      cursor_pro;
end;


函数(Function)

创建函数的语法:

CREATE [OR REPLACE] FUNCTION
  <function name> [(param1,param2)]
RETURN <datatype>  IS|AS
  [local declarations]
BEGIN
  Executable Statements;
  RETURN result;
EXCEPTION
  Exception handlers;
END;

create or replace function user_fun(ssuser varchar2)
return varchar2
is
v_name varchar2(30);
begin
     select t.name into v_name from t_user t where suser=ssuser; 
     return v_name;
end;


函数的两种调用方式pl/sql和sql语句
declare
v_name varchar2(30);
begin 
     v_name:=user_fun('test9');
     dbms_output.put_line(v_name);
end;

select user_fun('test9') as 用户名 from dual;


程序包(Packages)与程序包主体(Packages Bodies)
create or replace package my_user
as
  cursor my_cursor(ssuser varchar2) return t_user%rowtype;
  procedure my_pro(ssuser in varchar2,v_str out varchar2);
  function my_fun(ssuser varchar2) return varchar2;
end;

create or replace package body my_user
as
  cursor my_cursor(ssuser varchar2) return t_user%rowtype is
         select * from t_user where suser=ssuser;      
  procedure my_pro(ssuser in varchar2,v_str out varchar2)
  as
  --v_name t_user.username%type;
  rs_row t_user%rowtype;
  begin
       --select username into v_name from t_user where userid=user_id;
       --dbms_output.put_line(v_name);
       open my_cursor(ssuser);
            loop
                fetch my_cursor into rs_row;
                exit when my_cursor%notfound;
                v_str:=rs_row.name;
                if v_str!='龚帅' then
                   v_str:='龚帅';  
                end if;
            end loop;
       close my_cursor;
  end;
  
  function my_fun(ssuser varchar2)
  return varchar2
  as
  my_name t_user.name%type;
  begin
       select t.name into my_name from t_user t where suser=ssuser;
       return my_name;
  end;
end;

declare
v_str varchar2(30);
begin
     dbms_output.put_line('FUN---'||my_user.my_fun('test9'));
     my_user.my_pro('test6',v_str);
     dbms_output.put_line('PRO---'||v_str);
end;

Java调用存储过程
public String getNamePro(String suser) {
	String name = null;
	try {
		CallableStatement cstmt = this.getHibernateTemplate()
				.getSessionFactory().getCurrentSession().connection()
				.prepareCall("{call fantasy.user_pro(?,?)}");
		cstmt.setString(1, suser);
		cstmt.registerOutParameter(2, Types.VARCHAR);
		cstmt.execute();
		name = cstmt.getString(2);
	} catch (Exception e) {
		e.printStackTrace();
	}
	return name;
}

Java调用函数
public String getNameFun(String suser) {
	String name = null;
	try {
		CallableStatement cstmt = this.getHibernateTemplate()
		.getSessionFactory().getCurrentSession().connection()
		.prepareCall("{?=call fantasy.user_fun(?)}");
		cstmt.registerOutParameter(1, Types.VARCHAR);
		cstmt.setString(2, suser);
		cstmt.execute();
		name=cstmt.getString(1);
	} catch (Exception e) {
		e.printStackTrace();
	}
	return name;
}
1
0
分享到:
评论

相关推荐

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

    在Java编程中,调用Oracle数据库的存储过程和函数是常见的任务,这通常涉及到JDBC(Java Database Connectivity)API的使用。以下将详细介绍这个过程,包括必要的步骤、使用的类和方法,以及可能遇到的问题和解决...

    Oracle基础学习三过程PROCEDURE 和函数FUNCTION 的创建及用

    Oracle数据库是世界上最流行的关系型数据库管理系统之一,它提供了丰富的编程元素来实现复杂的业务逻辑,如过程(PROCEDURE)和函数(FUNCTION)。在本教程中,我们将深入探讨如何在Oracle中创建、调用以及删除这两...

    oracle函数调用存储过程

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

    Java调用Oracle的过程和函数.doc

    10. **Oracle函数和过程**: Oracle数据库支持两种类型的PL/SQL块:过程(无返回值)和函数(返回一个值)。在Java中,根据所调用的是过程还是函数,注册输出参数和处理结果的方式会有所不同。 以上是Java调用Oracle...

    JAVA 与ORACLE 存储过程及函数

    标题中的“JAVA 与ORACLE 存储过程及函数”是指在Java编程语言中与Oracle数据库交互时,如何使用存储过程和函数的概念。在Oracle数据库中,存储过程是一组预编译的SQL语句和PL/SQL代码,而函数则是返回特定值的存储...

    Delphi procedure and function

    函数同样可以有参数,并且参数的传递方式和过程一样,也可以是值传递或引用传递。 详细说明Delphi函数与过程时,文档可能包含了以下几个方面的知识点: 1. 基本定义:介绍什么是过程,什么是函数,它们在程序中的...

    java调用存储过程

    ### Java调用存储过程详解 #### 一、存储过程简介 在数据库系统中,存储过程是一种预先编写并编译好的SQL脚本,它可以接受输入参数并返回结果集或输出参数。存储过程的主要优点包括提高性能(因为它们是预编译的)...

    GBase 8S 自定义存储过程和函数.doc

    3. **减少网络负载**:调用存储过程时,只需要发送存储过程的名称和参数,而不是完整的SQL语句,降低了网络传输的数据量,提高了通信效率。 4. **增强安全性**:通过参数化的存储过程,可以防止SQL注入攻击,同时...

    存储过程,存储函数和触发器

    在Java中,可以使用JDBC驱动来调用存储过程或存储函数。通常需要使用`CallableStatement`对象来进行调用。 #### 调用存储过程 ```java Connection conn = DriverManager.getConnection("jdbc:oracle:thin:@...

    存储过程和函数

    为了允许其他用户调用存储过程,可以使用`GRANT EXECUTE`权限授予特定用户: ```sql GRANT EXECUTE ON 存储过程名称 TO 用户名; ``` ### 二、函数 #### 1. 创建函数 数据库函数类似于存储过程,但主要目的是返回一...

    MyBatis调用Procedure+Function.pptx

    使用MyBatis框架配置Oracle和MySql中存储过程与函数的调用。 分别描述了两种方式的实现:基于XML方式和注解方式。 其中Oracle所使用版本为Oracle11g_XE版,MySQL为5.7版本

    Oracle存储过程、函数和包

    - **权限需求**:调用存储过程需要是创建者本人或拥有`EXECUTE ANY PROCEDURE`权限,或被授予了`EXECUTE`权限。 - **方法**: - 直接执行:`EXECUTE 模式名.存储过程名[(参数)];` - 在PL/SQL块中调用:`BEGIN ...

    存储过程和函数的区别

    在数据库编程中,存储过程(Stored Procedure)与函数(Function)都是预编译并存储在数据库服务器上的代码块,能够提高应用程序性能,简化复杂的数据库操作,并增强数据一致性及安全性。但它们在设计目的、返回值...

    jdbc调用存储过程,函数,游标

    在IT行业中,数据库操作是不可或缺的一部分,而Java的JDBC(Java Database Connectivity)API则提供了与各种数据库交互的...通过阅读提供的博客链接,你将能获取更多关于JDBC调用存储过程和函数的实践经验及详细解释。

    Mysql存储过程和函数

    3. **调用存储过程**: ```sql CALL p1(1, @name); ``` 这里传入ID为1,并将输出的值保存在变量`@name`中。 #### 五、存储过程与函数的高级特性 - **DDL语句的支持**:存储过程允许包含DDL(数据定义语言)...

    第11章MySQL存储过程与函数.docx

    MySQL 存储过程和函数是数据库中定义的一组用户定义的 SQL 语句集合。它们之间的区别在于: 1. 存储过程实现的功能要复杂一点,而函数实现的功能针对性比较强。 2. 存储过程可以返回参数,而函数只能返回值或者表...

    Mysql手册20-存储过程和函数

    - ALTER PROCEDURE 和 ALTER FUNCTION 语句用于修改已存在的存储过程和函数。 - DROP PROCEDURE 和 DROP FUNCTION 语句用于删除存储过程和函数。 - SHOW CREATE PROCEDURE 和 SHOW CREATE FUNCTION 语句用于显示存储...

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

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

    hibernate query调用oracle存储过程

    在Hibernate中,调用存储过程通常通过Session对象的createNativeQuery()方法实现,这个方法用于创建原生SQL查询,可以方便地调用数据库的自定义SQL或者存储过程。以下是一个简单的示例,展示了如何调用一个不带参数...

Global site tag (gtag.js) - Google Analytics