1

如何使用 oracle xe 制作 oracle 程序,如何检查输入是否有效?例如:如果我的输入是数字并且我输入 char 那个过程会在这种情况下打印出一些东西,我已经处理了 SQL 但没有处理这些类型的过程?任何帮助表示赞赏

更新

这是一个虚拟示例.. 我的意思是从最简单的事情开始,然后继续进行更复杂的示例,我真正需要的是检查 a field bookin是否table books等于 0,然后停止borrowing query插入 else 插入。

4

4 回答 4

3

这是我认为您想要的那种过程的示例。我不得不做出几个(我希望是受过教育的)猜测来填补你的例子中的空白。

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;
/   
于 2010-01-09T08:11:44.157 回答
1

您的问题听起来不像您需要 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 中循环游标并插入值。

于 2010-01-08T18:32:12.663 回答
0

您的存储过程参数已经是强类型的。如果你有一个“int”参数,有人输入“ABC”作为值,Oracle 将通过它。你不必/不需要。

于 2010-01-08T18:03:07.743 回答
0

像这样的东西?

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;
于 2010-01-08T18:21:21.963 回答