存储过程,可以实现程序不能经常发布的情况下,直接到存储过程里改逻辑。
一、存储过程的语法结构。
IF EXISTS (SELECT name
FROM sysobjects
WHERE name = 'Proc_InsertEmployee'
AND type = 'P')
DROP PROCEDURE Proc_InsertEmployee
GO
CREATE PROCEDURE Proc_InsertEmployee
@PName nvarchar(50),
@PSex nvarchar(4),
@PAge int,
@PWage money
AS
begin
declare @PID nvarchar(50)
select @PID=Max(员工编号) from tb_Employee
if(@PID is null)
set @PID='P1001'
else
set @PID='P'+cast(cast(substring(@PID,2,4) as int)+1 as nvarchar(50))
begin
insert into tb_Employee values(@PID,@PName,@PSex,@PAge,@PWage)
end
end
go
sql server
CREATE OR REPLACE PROCEDURE P_存储过程名(变量名 IN|OUT 数据类型) -- 存储过程名称通常以P_开头
IS -- IS作为申明变量的关键词
V_NUM NUMBER; -- 声明NUMBER类型的变量,后以分号结束
V_USERNAME VARCHAR2(40); -- 声明VARCHAR2类型的变量
V_SORT INTEGER; -- 声明Integer类型的变量
V_IS_BIND NUMBER(12); -- 声明长度为12的NUMBER类型变量
V_NAME T_USER.NAME%TYPE; -- 声明变量直接赋值(表中NAME类型和长度就是V_NAME的类型和长度)
V_USER T_USER%ROWTYPE; -- 声明记录型变量,相当于Java的对象,可以使用点加变量名获取值
CURSOR T_USER IS SELECT NAME,AGE FROM T_USER; -- 声明游标
-- 此处只作演示所用,其他变量声明可参考博文下面的示例及注释;
BEGIN -- 执行代码开始
-- 执行的代码逻辑,类似Java的方法体
V_USER := '张三'; -- 给变量赋值。语法是冒号后面跟等号
DBMS_OUTPUT.PUT_LINE(TO_CHAR(SYSDATE, 'YYYYMMDD')); -- 打印语句,相当于Java中的println方法
EXCEPTION -- 异常
WHEN OTHERS THEN ... -- OTHERS相当于Java中的Exception,会捕获所有异常
END; -- 执行代码结束,以分号结束,也有一些是END后跟储存过程名加分号
oracle
二、存储过程之间调用。
sql server
Call Procedure_Name(参数);
Excute Procedure_Name(参数);
oracle
Call Procedure_Name(参数);
Excute Procedure_Name(参数);