//存储过程,为以后使用而保存的一条或多条SQL语句
1.把处理封装在一个易用单元,简化复杂操作
2.减少步骤,防止错误,保证了数据的一致性
3.简化对变动的管理,只需要更改存储过程的代码,限制对基础数据的访问,更安全
4.存储过程以编译过形式存储,性能更高
5.有些特性和SQL元素只能用在单个请求中
//执行存储过程
EXECUTE AddNewProduct('JTS01',
'Tower',
6.49,
'Red and blue');
//创建存储过程,Oracle版本
CREATE PROCEDURE MailingListCount(
ListCount OUT INTEGER//OUT是从存储过程返回值,IN是传递值给存储过程,INOUT两者都有
)
IS
v_rows INTEGER
BEGIN//存储过程的代码在BEGIN和END语句中
SELECT COUNT(*) INTO v_rows
FROM Customers
WHERE NOT cust_email IS NULL;
ListCount :=v_rows//用检索出的行数设置输出参数
END;
//调用存储过程
var ReturnValue NUMBER//声明变量保存返回值
EXEC MailingListCount(:ReturnValue);
SELECT ReturnValue//显示返回值
//SQL Server版本
CREATE PROCEDURE MailingListCount
AS
DECLARE @cnt INTEGER//声明变量,@开头是局部变量
SELECT @cnt=Count(*)//给变量赋值
FROM Customers
WHERE NOT cust_email IS NULL
RETURN @cnt//返回调用程序
//调用
DECLARE @ReturnValue INT
EXECUTE @ReturnValue=MailingListCount
SELECT @ReturnValue
//用存储过程插入新订单
CREATE PROCEDURE NewOrder @cust_id CHAR(10)
AS
--为订单号声明一个变量
DECLARE @order_num INTEGER
--获取当前最大订单号
SELECT @order_num=MAX(order_num)
FROM Orders
--决定下一个订单号
SELECT @order_num=@order_num+1
--插入新订单
INSERT INTO Orders(order_num,order_date,cust_id)
VALUES(@order_num,GETDATE( ),@cust_id)
--返回订单号
RETURN @order_num
//另一个版本
CREATE PROCEDURE NewOrder @cust_id(10)//只有一个传入参数
AS
--插入新订单
INSERT INTO Orders(cust_id)
VALUES(@cust_id)//日期和订单号自动生成
--返回订单号
SELECT order_num=@@IDENTITY//从全局变量中得到自动生成的订单号
SQL使用视图
最新推荐文章于 2023-10-09 04:00:19 发布