2016-10-10 28 views
1

我在嘗試解決這個問題時遇到了很多麻煩。從本質上講,我試圖在Oracle SQL Developer中創建一個過程,使兩本書借給借款人。這些表和值是正確設置的。我覺得我創建的過程可能非常接近(在正確的軌道上),但是我對語法感到困惑,特別是在日期和嘗試調用過程時。PLSQL - 使用戶能夠借出多本圖書的存儲過程

模式中還有一些其他相關的表格,但要點是我試圖將圖書館/借閱者記錄插入到名爲貸款的表中。插入的值包括:2x isbn,branchid,cardno,dateout(當借書時)和datein(默認情況下爲null,直到返回book/s)。這些是貸款表中的列名。

這是我一直在努力的程序。請跟我袒露我是一個SQL初學者:

create or replace procedure BorrowTwoBooks(
p_isbn in varchar2, 
p_isbn2 in varchar2, 
p_branchid in number, 
p_cardno in number 
) 
is 
pDate Date Default SysDate; 
begin 
    insert into loan values(p_isbn, p_branchid, p_cardno, pDate, null); 
    insert into loan values(p_isbn2, p_branchid, p_cardno, pDate, null); 
end BorrowTwoBooks; 

,這是我怎麼想嘗試調用的程序一旦它創建了一個例子:

begin 
BorrowTwoBooks(
'9-9996751-3-1','1','489',pDate); 
'1-8744165-3-2','1','489',pDate); 
end; 

在那裏我希望的語法將是:

begin 
BorrowTwoBooks(
'[isbn1],'[branchid],[cardno],[dateout]); 
'[isbn2],'[branchid],[cardno],[dateout]); 
end; 

任何幫助將不勝感激。這是我的第一篇文章,謝謝大家提前的幫助。 :)

回答

1

爲你的程序的語法是:

begin 
BorrowTwoBooks([isbn1],[isbn2],[branchid],[cardno]); 
end; 

嘗試致電:

begin 
BorrowTwoBooks('9-9996751-3-1','1-8744165-3-2','1','489'); 
end; 
+0

非常感謝! – jmunson

0

Yoc創建過程,需要4個參數。其中兩個是書籍和另外兩個人的ISBN是兩本書共同所以調用應該是這樣的:

begin 
BorrowTwoBooks(
'9-9996751-3-1','1-8744165-3-2',1,489); 
end; 

而且日期不是函數的參數。在調用過程時將其設置爲sysdate。

0

你已經得到有關具體情況的答案,但在我看來,你想有一個過程日期作爲默認情況下是sysdate的參數,但可以根據需要填入其他日期。

如果是這樣的話,你的程序應該是這樣的:

create or replace procedure BorrowTwoBooks(
    p_isbn in varchar2, 
    p_isbn2 in varchar2, 
    p_branchid in number, 
    p_cardno in number, 
    p_date in date default sysdate) 
is 
begin 
    insert into loan(isbn, branchid, cardno, dateout, datein) 
    values(p_isbn, p_branchid, p_cardno, p_date, null); 

    insert into loan(isbn, branchid, cardno, dateout, datein) 
    values(p_isbn2, p_branchid, p_cardno, p_date, null); 
end BorrowTwoBooks; 

你可以把它不提供日期:

begin 
    BorrowTwoBooks('9-9996751-3-1', '1-8744165-3-2', '1', '489'); 
end; 

或者,你可以與特定日期叫它:

declare 
    l_date date; 
begin 
    l_date := to_date('2016/10/05', 'yyyy/mm/dd'); 
    BorrowTwoBooks('9-9996751-3-1', '1-8744165-3-2', '1', '489', l_date); 
end; 

還有另一種方法來調用過程 - 通過提供參數名稱。這句話可能會更容易理解:

begin 
    BorrowTwoBooks(p_isbn  => '9-9996751-3-1', 
       p_isbn2 => '1-8744165-3-2', 
       p_branchid => '1', 
       p_cardno => '489'); 
end;