如何用oracle xe製作oracle程序,我該如何檢查輸入是否有效?例如:如果我的輸入是數字,而且我輸入的字符數是程序打印出來的東西,那麼我已經處理了SQL,但沒有處理這些類型的程序?任何幫助表示讚賞oracle存儲過程
UPDATE
這是一個虛擬的例子..我的意思是,從最簡單的事情開始然後移動到更復雜的例子,就是我真正需要的是檢查一個field book
在table books
等於0,然後停止borrowing query
插入else插入。
如何用oracle xe製作oracle程序,我該如何檢查輸入是否有效?例如:如果我的輸入是數字,而且我輸入的字符數是程序打印出來的東西,那麼我已經處理了SQL,但沒有處理這些類型的程序?任何幫助表示讚賞oracle存儲過程
UPDATE
這是一個虛擬的例子..我的意思是,從最簡單的事情開始然後移動到更復雜的例子,就是我真正需要的是檢查一個field book
在table books
等於0,然後停止borrowing query
插入else插入。
下面是我認爲你想要的那種過程的一個例子。我不得不做一些(我希望受過教育的)猜想來填補你的例子中的空白。
create or replace procedure borrow_book
(p_book in books.id%type
, p_borrower in library_member.id%type)
as
cursor cur_book is
select out_flag
from books
where id = p_book
for update of out_flag;
rec_book cur_book%rowtype;
begin
open cur_book;
fetch cur_book into rec_book;
if rec_book.out_flag = 0
then
raise_application_error(-20000, 'Book is already out on loan.');
else
insert into loans (book_id, borrower_id, issue_date)
values (p_book, p_borrower, sysdate);
update books
set out_flag = 0
where current of cur_books;
end if;
close cur_book;
end borrow_book;
/
@APC:+1,聽起來像是一個很好的猜測,至少比我的好。我目前對這個問題的解釋是,表'book'中有一些count列('book'),如果不是0,應該減少。但是我們必須把它留給OP來清除。 – 2010-01-09 12:33:09
您的存儲過程參數已經被強類型化。如果你有一個「int」參數,那麼有人在「ABC」中鍵入這個值,Oracle會通過它。你不需要/不需要。
我剛剛更新了問題 – ant 2010-01-08 18:05:23
這樣的事情?
create or replace PROCEDURE BOOK() AS
BEGIN
declare cursor cur_b is
select * from books;
BEGIN
FOR book_row IN cur_b LOOP
IF book_row.book=0 THEN
INSERT INTO ...
END IF;
end loop;
end;
END BOOK;
你的問題聽起來不像你需要PL/SQL。
單個SQL-插入應該做的(如果我明白你的問題的權利):
INSERT INTO new_table
SELECT id, val FROM books WHERE book = 0;
如果您仍需要一個過程,它放入一個過程:
CREATE OR REPLACE PROCEDURE my_proc AS
BEGIN
INSERT INTO new_table
SELECT id, val FROM books WHERE book = 0;
END my_proc;
儘量避免在PL/SQL中循環遊標並插入值,可以在單個SQL中完成。
「停止借閱查詢」是什麼意思? – 2010-01-08 18:28:47
它只是查詢的名稱,請阻止它執行 – ant 2010-01-08 19:16:34
啊,我明白了。我認爲我們需要更多關於該程序的信息,實際上做了什麼以及何時停止這樣做。 – 2010-01-08 19:47:57