创建存储过程get_book_information 调用过程 存储过程和函数都已经创建好了,需要查询某图书的信息时就可以直接调用get_book_information存储过程。例如获取bookid为2的图书的信息。
时间: 2024-02-25 22:58:55 浏览: 58
存储过程调用
好的,这是创建存储过程 `get_book_information` 的 SQL 语句,以及调用该存储过程获取 `bookid` 为 2 的图书信息的示例:
```sql
-- 创建存储过程
CREATE OR REPLACE PROCEDURE get_book_information(book_id NUMBER)
IS
book_title books.title%TYPE;
author_name authors.name%TYPE;
category_name categories.name%TYPE;
publisher_name publishers.name%TYPE;
BEGIN
SELECT b.title, a.name, c.name, p.name
INTO book_title, author_name, category_name, publisher_name
FROM books b
JOIN authors a ON b.author_id = a.id
JOIN categories c ON b.category_id = c.id
JOIN publishers p ON b.publisher_id = p.id
WHERE b.id = book_id;
DBMS_OUTPUT.PUT_LINE('Book ID: ' || book_id);
DBMS_OUTPUT.PUT_LINE('Book Title: ' || book_title);
DBMS_OUTPUT.PUT_LINE('Author Name: ' || author_name);
DBMS_OUTPUT.PUT_LINE('Category Name: ' || category_name);
DBMS_OUTPUT.PUT_LINE('Publisher Name: ' || publisher_name);
EXCEPTION
WHEN NO_DATA_FOUND THEN
DBMS_OUTPUT.PUT_LINE('Book not found!');
END;
/
-- 调用存储过程
BEGIN
get_book_information(2);
END;
/
```
存储过程 `get_book_information` 接受一个整数参数 `book_id`,用于查询指定 ID 对应的图书信息。在存储过程主体中,使用 `SELECT ... INTO` 语句从 `books` 表以及相关的作者、分类和出版商表中查询图书信息,并将其赋值给相应的变量。然后使用 `DBMS_OUTPUT.PUT_LINE` 语句将图书信息打印到控制台上。
如果查询结果为空,则会抛出 `NO_DATA_FOUND` 异常,此时会打印出相应的提示信息。
在调用存储过程时,使用 `BEGIN ... END` 语句将存储过程的调用包裹起来,并传入参数值。在上述示例中,调用存储过程 `get_book_information` 并传入参数值 2,以获取 `bookid` 为 2 的图书信息。
阅读全文