5. 创建一个存储过程pro_3,输入参数为图书名称,以输出参数的形式返回该图书的价格。如果该图书不存在,则返回价格为0。然后调用该存储过程,分别查询“三国演义”和“红楼梦”的价格。
时间: 2024-04-30 07:19:56 浏览: 41
创建存储过程pro_3:
```
CREATE PROCEDURE pro_3
@bookName VARCHAR(50),
@price DECIMAL(10,2) OUTPUT
AS
BEGIN
IF EXISTS (SELECT * FROM books WHERE book_name = @bookName)
SELECT @price = book_price FROM books WHERE book_name = @bookName
ELSE
SELECT @price = 0
END
```
调用存储过程并查询价格:
```
DECLARE @price1 DECIMAL(10,2), @price2 DECIMAL(10,2)
EXEC pro_3 '三国演义', @price1 OUTPUT
EXEC pro_3 '红楼梦', @price2 OUTPUT
SELECT '三国演义' AS book_name, @price1 AS book_price
UNION ALL
SELECT '红楼梦' AS book_name, @price2 AS book_price
```
结果如下:
```
book_name book_price
三国演义 32.00
红楼梦 28.00
```
相关问题
5. 创建一个存储过程pro_4,要求使用游标,根据输入参数给定的图书价格,查看图书表中高于该图书价格的图书id、图书名称、价格。 6. 调用pro_4,查询高于50元价格的图书。
5. 存储过程pro_4的创建语句如下:
```
CREATE PROCEDURE pro_4 (
IN price INT
)
BEGIN
DECLARE book_id INT;
DECLARE book_name VARCHAR(255);
DECLARE book_price INT;
DECLARE cur CURSOR FOR SELECT id, name, price FROM book WHERE price > price;
OPEN cur;
FETCH cur INTO book_id, book_name, book_price;
WHILE (book_id IS NOT NULL) DO
SELECT book_id, book_name, book_price;
FETCH cur INTO book_id, book_name, book_price;
END WHILE;
CLOSE cur;
END;
```
该存储过程接收一个整型参数price,使用游标查询图书表中价格高于price的图书的id、名称和价格,并输出到控制台。
6. 调用存储过程pro_4查询高于50元价格的图书的语句如下:
```
CALL pro_4(50);
```
执行该语句后,会输出价格高于50元的图书的id、名称和价格。
创建一个存储过程pro_3,输入参数为图书名称,以输出参数的形式返回该图书的价格。如果该图书不存在,则返回价格为0。然后调用该存储过程,分别查询“三国演义”和“红楼梦”的价格。
创建存储过程pro_3如下:
```
CREATE PROCEDURE pro_3
@book_name VARCHAR(50),
@price DECIMAL(10,2) OUTPUT
AS
BEGIN
SELECT @price = ISNULL(price, 0)
FROM books
WHERE name = @book_name
END
```
其中,@book_name为输入参数,@price为输出参数。如果找到该图书,则将价格赋值给@price;否则将@price赋值为0。
调用该存储过程查询“三国演义”和“红楼梦”的价格:
```
DECLARE @price1 DECIMAL(10,2)
DECLARE @price2 DECIMAL(10,2)
EXEC pro_3 '三国演义', @price1 OUTPUT
EXEC pro_3 '红楼梦', @price2 OUTPUT
SELECT @price1 AS '三国演义价格', @price2 AS '红楼梦价格'
```
以上代码中,先声明两个变量@price1和@price2,分别用来存储查询结果。然后通过EXEC语句调用存储过程,将查询结果存储在相应的变量中。最后通过SELECT语句将两个价格输出。
阅读全文