存储过程及java调用

过程和触发器概述


过程和触发器在数据库中存储过程 SQL 语句,以供所有应用程序使用。它们包括允许 SQL 语句的重复执行(LOOP 语句)和条件执行(IF 语句和 CASE 语句)的控制语句。

过程是通过 CALL 语句调用的,并且使用参数来接受值和将值返回到调用环境中。通过将过程名包括在 FROM 子句中,SELECT 语句也可以对过程结果集进行操作。

过程可以将结果集返回给调用者、调用其它过程或触发触发器。例如,用户定义的函数是一种将单个值返回到调用环境的存储过程。用户定义的函数不修改传递给它们的参数,而是拓展可用于查询和其它 SQL 语句的函数的范围。

触发器与特定数据库表相关联。只要有人插入、更新或删除关联表的行,触发器就会自动触发。触发器可以调用过程和触发其它触发器,但它们不具有任何参数并且无法由 CALL 语句调用 

示例 

以下简单示例创建过程 new_dept,该过程执行 INSERT 到示例数据库的 department 表的操作,从而创建新的部门。

CREATE PROCEDURE new_dept (
   IN id INT,
   IN name CHAR(35),
   IN head_id INT )
BEGIN
   INSERT
   INTO DBA.department ( dept_id,
       dept_name, dept_head_id )
   VALUES ( id, name, head_id );
END

过程的主体是复合语句。复合语句以 BEGIN 语句起始,以 END 语句结束。在 new_dept 的例子中,复合语句是包括在 BEGIN 和 END 语句之间的单个 INSERT。

过程的参数可以标记为 IN、OUT 或 INOUT 之一。缺省情况下,参数是 INOUT 参数。new_dept 过程的所有参数都是 IN 参数,因为该过程并不更改它们。

调用过程

CALL 语句调用过程。过程可由应用程序调用,或者由其它过程和触发器调用。

有关详细信息,请参见 CALL 语句

以下语句调用 new_dept 过程来插入 Eastern Sales 部门:

CALL new_dept( 210, 'Eastern Sales', 902 );

在此调用后,您最好检查 department 表,以查看是否已添加该新部门。

已被授予该过程的 EXECUTE 权限的所有用户都可以调用 new_dept 过程,即使他们对 department 表不具有任何权限。

有关 EXECUTE 权限的详细信息,请参见 EXECUTE 语句 [ESQL]

调用返回结果集的过程的另一种方法是在查询中调用它。您可以对过程的结果集执行查询,并应用 WHERE 子句和其它 SELECT 功能以限制结果集。

SELECT t.id, t.quantity_ordered AS q
FROM sp_customer_products( 149 ) t

有关详细信息,请参见 FROM 子句

示例 

以下语句从数据库中删除过程 new_dept:

DROP PROCEDURE new_dept

 

try{ 
int age = 39;
String poetName = "dylan thomas";
CallableStatement proc = connection.prepareCall("{ call set_death_age(?, ?) }");
proc.setString(1, poetName);
proc.setInt(2, age);
cs.execute();
}catch (SQLException e){ // ....}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值