存储过程(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;
}
分享到:
相关推荐
在Java编程中,调用Oracle数据库的存储过程和函数是常见的任务,这通常涉及到JDBC(Java Database Connectivity)API的使用。以下将详细介绍这个过程,包括必要的步骤、使用的类和方法,以及可能遇到的问题和解决...
Oracle数据库是世界上最流行的关系型数据库管理系统之一,它提供了丰富的编程元素来实现复杂的业务逻辑,如过程(PROCEDURE)和函数(FUNCTION)。在本教程中,我们将深入探讨如何在Oracle中创建、调用以及删除这两...
### Oracle函数调用存储过程详解 #### 背景与目的 在开发Oracle应用程序时,经常需要使用到存储过程和函数。这两种类型的数据库对象各有优势,可以满足不同的业务需求。有时候,为了更好地组织代码和提高复用性,...
10. **Oracle函数和过程**: Oracle数据库支持两种类型的PL/SQL块:过程(无返回值)和函数(返回一个值)。在Java中,根据所调用的是过程还是函数,注册输出参数和处理结果的方式会有所不同。 以上是Java调用Oracle...
标题中的“JAVA 与ORACLE 存储过程及函数”是指在Java编程语言中与Oracle数据库交互时,如何使用存储过程和函数的概念。在Oracle数据库中,存储过程是一组预编译的SQL语句和PL/SQL代码,而函数则是返回特定值的存储...
函数同样可以有参数,并且参数的传递方式和过程一样,也可以是值传递或引用传递。 详细说明Delphi函数与过程时,文档可能包含了以下几个方面的知识点: 1. 基本定义:介绍什么是过程,什么是函数,它们在程序中的...
### Java调用存储过程详解 #### 一、存储过程简介 在数据库系统中,存储过程是一种预先编写并编译好的SQL脚本,它可以接受输入参数并返回结果集或输出参数。存储过程的主要优点包括提高性能(因为它们是预编译的)...
在Java中,可以使用JDBC驱动来调用存储过程或存储函数。通常需要使用`CallableStatement`对象来进行调用。 #### 调用存储过程 ```java Connection conn = DriverManager.getConnection("jdbc:oracle:thin:@...
为了允许其他用户调用存储过程,可以使用`GRANT EXECUTE`权限授予特定用户: ```sql GRANT EXECUTE ON 存储过程名称 TO 用户名; ``` ### 二、函数 #### 1. 创建函数 数据库函数类似于存储过程,但主要目的是返回一...
使用MyBatis框架配置Oracle和MySql中存储过程与函数的调用。 分别描述了两种方式的实现:基于XML方式和注解方式。 其中Oracle所使用版本为Oracle11g_XE版,MySQL为5.7版本
3. **减少网络负载**:调用存储过程时,只需要发送存储过程的名称和参数,而不是完整的SQL语句,降低了网络传输的数据量,提高了通信效率。 4. **增强安全性**:通过参数化的存储过程,可以防止SQL注入攻击,同时...
- **权限需求**:调用存储过程需要是创建者本人或拥有`EXECUTE ANY PROCEDURE`权限,或被授予了`EXECUTE`权限。 - **方法**: - 直接执行:`EXECUTE 模式名.存储过程名[(参数)];` - 在PL/SQL块中调用:`BEGIN ...
在数据库编程中,存储过程(Stored Procedure)与函数(Function)都是预编译并存储在数据库服务器上的代码块,能够提高应用程序性能,简化复杂的数据库操作,并增强数据一致性及安全性。但它们在设计目的、返回值...
在IT行业中,数据库操作是不可或缺的一部分,而Java的JDBC(Java Database Connectivity)API则提供了与各种数据库交互的...通过阅读提供的博客链接,你将能获取更多关于JDBC调用存储过程和函数的实践经验及详细解释。
3. **调用存储过程**: ```sql CALL p1(1, @name); ``` 这里传入ID为1,并将输出的值保存在变量`@name`中。 #### 五、存储过程与函数的高级特性 - **DDL语句的支持**:存储过程允许包含DDL(数据定义语言)...
MySQL 存储过程和函数是数据库中定义的一组用户定义的 SQL 语句集合。它们之间的区别在于: 1. 存储过程实现的功能要复杂一点,而函数实现的功能针对性比较强。 2. 存储过程可以返回参数,而函数只能返回值或者表...
- ALTER PROCEDURE 和 ALTER FUNCTION 语句用于修改已存在的存储过程和函数。 - DROP PROCEDURE 和 DROP FUNCTION 语句用于删除存储过程和函数。 - SHOW CREATE PROCEDURE 和 SHOW CREATE FUNCTION 语句用于显示存储...
2. **调用存储过程**:使用`EXECUTE`关键字或直接在PL/SQL块中调用,如: ```sql DECLARE result VARCHAR2(100); BEGIN my_procedure(123, result); DBMS_OUTPUT.PUT_LINE(result); END; ``` **二、Oracle...
在Hibernate中,调用存储过程通常通过Session对象的createNativeQuery()方法实现,这个方法用于创建原生SQL查询,可以方便地调用数据库的自定义SQL或者存储过程。以下是一个简单的示例,展示了如何调用一个不带参数...