我正在尝试执行以下操作:
# get_all_books_by_author
drop procedure if exists func;
delimiter ^^
create procedure func(in authName varchar(20), out books varchar(255))
begin
select book.title
into books
from book
INNER JOIN wrote on wrote.bookcode = book.bookcode
INNER JOIN author on author.authornum = wrote.authornum
where authName = author.authorFirst;
end ^^
delimiter ;
call func('Toni', @books);
select @books;
这是我明天的考试练习,我正在尝试创建程序,以便当我在电话中输入作者的姓名时,它会从他/她那里获取所有书籍。
表格:
author: authorNum, authorLast, authorFirst
book: bookCode, title, publisherCode, type, paperback
wrote: bookCode, authorNum, sequence
如果有帮助,我为您创建了一个元组关系计算:
//The E means the existential quantifier
{ a.title | book(a) AND (Eb)( wrote(b) AND (Ec)( Author(c) AND
b.authornum=c.authornum AND b.bookcode=a.bookcode AND
c.authorFirst='name_of_the_OUT' ))}
如果上面的表达有错误请告诉我,我也在学习它,哈哈,但我认为它是正确的。我感兴趣的是带有过程的 sql 查询本身。
我尝试了这个基本的 SQL 并且可以工作,但是我无法让存储过程工作:
select title
from book
INNER JOIN wrote on wrote.bookcode = book.bookcode
INNER JOIN author on author.authornum = wrote.authornum
WHERE author.authorFirst = 'Toni';
请帮忙
谢谢!
最佳答案
对我来说工作正常 - 检查你的调用语句(你似乎在过程名称和调用语句之间不匹配)和数据
drop table if exists book,author,wrote;
create table book (bookcode int,title varchar(10));
create table author(authornum int, authorfirst varchar(5));
create table wrote(bookcode int, authornum int);
insert into book values(1,'aaa'),(2,'bbb');
insert into wrote values(1,1),(2,2);
insert into author values(1,'toni'),(2,'cyril');
drop procedure if exists func;
delimiter ^^
create procedure func(in authName varchar(20), out books varchar(255))
begin
select book.title
into books
from book
INNER JOIN wrote on wrote.bookcode = book.bookcode
INNER JOIN author on author.authornum = wrote.authornum
where authName = author.authorFirst;
end ^^
delimiter ;
call func('Toni', @books);
select @books;
+--------+
| @books |
+--------+
| aaa |
+--------+
1 row in set (0.00 sec)
关于mysql - 学习存储过程,简单查询(IN ... OUT ...),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49973857/