Java-SQL存储过程
存储过程是一组为了完成特定功能而预先编写的SQL语句集合,它们被存储在数据库中,可以多次调用。使用存储过程有多个优点,例如:
- 提高执行速度。存储过程在创建时编译,之后可以多次调用而无需重复编译,这比单独执行每次SQL语句更快。
- 减少网络传输。存储过程直接在数据库服务器上运行,只需传递存储过程的名称和参数,减少网络中的数据传输量。
- 便于维护。如果需要修改存储过程中的业务逻辑,可以直接进行更改,无需重新编译或分发整个程序。
- 增强安全性。可以设置存储过程的使用权限,防止未经授权的访问。
- 提高可扩展性。通过将数据库操作与应用程序逻辑分离,便于数据库的扩展和维护。
然而,存储过程也有一些缺点:
- 可移植性差。不同数据库系统中的存储过程可能不兼容,限制了应用程序的可移植性。
调试困难。与应用程序代码相比,存储过程调试通常更复杂,需要特定的数据库管理系统支持。 - 重新编译问题。当存储过程使用的表结构或数据类型发生变化时,需要重新编译和测试存储过程。
- 不支持集群。使用存储过程可能影响数据库的水平拓展或切割,因为存储过程可能不知道数据分布在哪个数据库中。
- 开发工作量。对于复杂的业务逻辑,将所有代码封装在存储过程中可能导致代码难以理解和维护。
因此,虽然存储过程在某些情况下非常有用,但它们并不适用于所有情况。在选择使用存储过程时,应考虑到这些优缺点,并根据具体应用场景做出决策。
MYSQL存储过程
DELIMITER //
CREATE PROCEDURE 存储过程名(IN param1 INT)
BEGIN
SELECT param1 + 10 AS result;
END //
DELIMITER ;
需要具有适当权限的用户才能创建存储过程。DELIMITER用于改变语句的结束标志,以便在存储过程中使用分号 (😉;在定义存储过程时,DELIMITER 被设置为 //时再结束。
SQLSERVER存储过程
CREATE PROCEDURE 存储过程名
@Column1 NVARCHAR(50),
@Column2 NVARCHAR(50)
AS
BEGIN
SELECT * FROM 表名 WHERE 字段1 = @Column1 and 字段2 = @Column2
END
GO
ORACLE存储过程
create [or replace] procedure 存储过程名(param1 in type,param2 out type)
as
变量1 类型(值范围);
变量2 类型(值范围);
begin
select count(*) into 变量1 from 表名 where 字段名 = param1;
if (判断条件) then
select 列名 into 变量2 from 表A where列名=param1;
dbms_output.Put_line('打印信息');
elsif (判断条件) then
dbms_output.Put_line('打印信息');
else
raise 异常名(NO_DATA_FOUND);
end if;
exception
when others then
rollback;
end;
in 是参数的默认模式,这种模式就是在程序运行的时候已经具有值,在程序体中值不会改变。
out 模式定义的参数只能在过程体内部赋值,表示该参数可以将某个值传递回调用他的过程
in out 表示高参数可以向该过程中传递值,也可以将某个值传出去