mysql - 学习存储过程,简单查询(IN ... OUT ...)

标签 mysql sql database stored-procedures rdbms

我正在尝试执行以下操作:

    # 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/

相关文章:

mysql - 如何将MySql数据库迁移到Firestore

php - Magento 中保存 "Special Price"的表在哪里?

sql - 如何将此 INNER JOIN 查询从 SQL Server 转换为 MySQL?

mysql - 选择嵌套的 AND OR。如何?

java - 为文件存储预分配驱动器空间

php - 如何加速这个 mySQL 查询(文件排序问题)?

mysql - 你能拆分/分解 MySQL 查询中的字段吗?

mysql - 从表中删除重复项

java - 同时更新特定 db-table-row-column 的最佳做法是什么?

database - Cassandra - 对于给定的 ColumnFamily,每个节点恰好一行宽?