1

oracle xeでoracleプロシージャを作成するにはどうすればよいですか?入力が有効かどうかを確認するにはどうすればよいですか? 例:入力が数値で、その場合にプロシージャが何かを出力するcharを入力した場合、SQLを扱ったことがありますが、これらの種類のプロシージャは扱っていませんか? どんな助けでも大歓迎です

アップデート

これはダミーの例でした..私が意味したのは、最も単純なことから始めて、より複雑な例に進むことです。実際に必要なのは、a field bookintable booksが 0 に等しいかどうかを確認し、挿入を停止borrowing queryして挿入することです。

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

このようなもの?

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 に答える
0

ストアド プロシージャのパラメーターは、既に厳密に型指定されています。「int」パラメーターがある場合、誰かが値として「ABC」と入力すると、Oracle はそれを実行します。する必要はありません。

于 2010-01-08T18:03:07.743 に答える