хранимые процедуры оракула - PullRequest
1 голос
/ 08 января 2010

как я могу выполнить процедуру oracle с oracle xe, как я могу проверить правильность ввода или нет? пример: если мой ввод - число, и я набираю char, что процедура печатает что-то в этом случае, я имел дело с SQL, но не с такими процедурами? любая помощь приветствуется

UPDATE

Это был фиктивный пример ... что я имел в виду, чтобы начать с самой простой вещи, затем перейти к более сложным примерам, что мне действительно нужно, это проверить, равно ли field book в table books 0, затем остановиться borrowing query чтобы вставить еще вставить.

Ответы [ 4 ]

3 голосов
/ 09 января 2010

Вот пример процесса, который, я думаю, вам нужен. Мне пришлось сделать пару (я надеюсь, образованных) догадок, чтобы заполнить пробелы в вашем примере.

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;
/   
1 голос
/ 08 января 2010

Ваша проблема не звучит так, как будто вам нужен 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.

0 голосов
/ 08 января 2010

Как то так?

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;
0 голосов
/ 08 января 2010

Параметры хранимых процедур уже строго напечатаны. Если у вас есть параметр "int", который кто-то вводит в значение "ABC", Oracle выполнит его. Вам не нужно / нужно.

...