PLSQL程序,用于查询两个表并循环遍历结果
我有两张桌子 书籍: 副本:PLSQL程序,用于查询两个表并循环遍历结果,sql,oracle,stored-procedures,plsql,rdbms,Sql,Oracle,Stored Procedures,Plsql,Rdbms,我有两张桌子 书籍: 副本: CREATE TABLE Copies ( copy_id INTEGER NOT NULL , book_id INTEGER NOT NULL , copy_number INTEGER NOT NULL, constraint copy_number_unique unique(book_id,copy_number) ) ; 因此,一本书的所有副本的副本表条目(book.no_of_Copies是5,那么副本表中有5个副本(行) 我
CREATE TABLE Copies
(
copy_id INTEGER NOT NULL ,
book_id INTEGER NOT NULL ,
copy_number INTEGER NOT NULL,
constraint copy_number_unique unique(book_id,copy_number)
) ;
因此,一本书的所有副本的副本表条目(book.no_of_Copies是5,那么副本表中有5个副本(行)
我如何编写一个过程,将输入参数作为book_id,并通过首先查询book表来查找no_拷贝。如果没有副本,则查询副本表并显示每个结果的副本号、货架号和呼叫号
CREATE PROCEDURE (P_BOOK_ID INTEGER)
CURSOR C1(L_BOOK_ID INTEGER) IS
SELECT * FROM COPIES WHERE BOOK_ID = L_BOOK_ID;
L_NUM_COPIES NUMBER;
BEGIN
SELECT NO_OF_COPIES INTO L_NUM_COPIES FROM BOOK WHERE BOOK_ID = P_BOOK_ID;
IF L_NUM_COPIES>0
THEN
FOR CUR IN C1(P_BOOK_ID)
LOOP
DBMS_OUTPUT.PUT_LINE(CUR.COPY_NUMBER);
END LOOP;
END;
或
或
…或者,呃,您可以编写以下非常简单的查询:
select copies.copy_number,
book.shelf_letter,
book.call_number
from book
join copies
on copies.book_id = book.book_id
where book.book_id = ???
and book.no_of_copies > 0
如果必须,您可以将其包装在一个过程中,但我无法想象您为什么需要。…或者,呃,您可以编写以下非常简单的查询:
select copies.copy_number,
book.shelf_letter,
book.call_number
from book
join copies
on copies.book_id = book.book_id
where book.book_id = ???
and book.no_of_copies > 0
如果必须,您可以将其包装在过程中,但我无法想象您为什么需要这样做。存储过程本身不显示任何内容,而是返回输出参数。存储过程本身不显示任何内容,而是返回输出参数。谢谢。我只是被迫按程序来做,而不是按直截了当的方式做。。疯狂世界我猜:)谢谢你。我只是被迫按程序来做,而不是按直截了当的方式做。。疯狂世界我猜:)请不要这样做。没有。一个。@CleverIdeaWidgetry为什么我们不应该这样做?@FahmiRamadhan我最初的评论是指最初发布的双光标方法。然后,在我的评论之后,它被更新,在一个游标中完成,这是非常好的。我应该自己编辑而不是说“不”。请不要这样做。没有。一个。@CleverIdeaWidgetry为什么我们不应该这样做?@FahmiRamadhan我最初的评论是指最初发布的双光标方法。然后,在我的评论之后,它被更新,在一个游标中完成,这是非常好的。我应该自己编辑而不是说“不”。
select copies.copy_number,
book.shelf_letter,
book.call_number
from book
join copies
on copies.book_id = book.book_id
where book.book_id = ???
and book.no_of_copies > 0