如何使用 oracle xe 制作 oracle 程序,如何检查输入是否有效?例如:如果我的输入是数字并且我输入 char 那个过程会在这种情况下打印出一些东西,我已经处理了 SQL 但没有处理这些类型的过程?任何帮助表示赞赏
更新
这是一个虚拟示例.. 我的意思是从最简单的事情开始,然后继续进行更复杂的示例,我真正需要的是检查 a field book
in是否table books
等于 0,然后停止borrowing query
插入 else 插入。
如何使用 oracle xe 制作 oracle 程序,如何检查输入是否有效?例如:如果我的输入是数字并且我输入 char 那个过程会在这种情况下打印出一些东西,我已经处理了 SQL 但没有处理这些类型的过程?任何帮助表示赞赏
更新
这是一个虚拟示例.. 我的意思是从最简单的事情开始,然后继续进行更复杂的示例,我真正需要的是检查 a field book
in是否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;
/
您的问题听起来不像您需要 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;
当可以在单个 SQL 中完成时,尽量避免在 PL/SQL 中循环游标并插入值。
您的存储过程参数已经是强类型的。如果你有一个“int”参数,有人输入“ABC”作为值,Oracle 将通过它。你不必/不需要。
像这样的东西?
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;