Выберите Statement внутри процедуры в Oracle

Извините, что задал этот вопрос, но это потому, что ни один из ответов, приведенных выше, не является достаточным для понимания. Я хочу написать хранимую процедуру, которая возвращает все столбцы в таблице. В качестве запроса ad hod я просто пишу

SELECT * FROM EMPLOYEES

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

Ответ 1

Люди с фон SQL Server используются для записи хранимых процедур, возвращающих результаты всего запроса, и поэтому пытайтесь написать процедуры PL/SQL примерно так:

procedure get_emps is
begin
    -- this will NOT work!
    select * from emp;
end;

К сожалению, это не так просто. Вероятно, ближайший эквивалент PL/SQL - это функция, возвращающая курсор ref:

function get_emps return sys_refcursor is
    rc sys_refcursor;
begin
    open rc for
        select * from emp;
    return rc;
end;

Вы можете вызвать это из вызывающей программы следующим образом:

declare
    cur sys_refcursor;
    emp_rec emp%rowtype;
begin
    cur := get_emps;
    loop
        fetch cur into emp_rec;
        exit when cur%notfound;
    end loop;
    close cur;
end;

или в SQL Plus вы можете сделать:

var rc refcursor
:rc := get_emps;
print rc