如何用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