Да, это возможно. Например:
select get_books (1) book,
get_author(1) author
from dual;
Предположительно, обе функции возвращают одно значение. Если какой-либо из этих элементов выбора (используемых в функциях) возвращает более одной строки, он завершится ошибкой.
Что касается процедуры: опубликованный вами код недействителен, поэтому я исправил его.
SQL> create or replace procedure get_categories (l_categories in varchar2,
2 l_id in number,
3 l_boolean out boolean,
4 l_error out varchar2)
5 is
6 begin
7 -- INSERT INTO categories (id, categories)
8 -- VALUES (l_categories, l_id);
9
10 l_boolean := true;
11 commit;
12 exception
13 when others
14 then
15 l_boolean := false;
16 l_error := sqlerrm;
17 end;
18 /
Procedure created.
Поскольку он возвращает 2 параметра OUT, вы должны объявить переменные для принятия этих значений (v_boolean
и v_error
). Кроме того, поскольку вы не можете напрямую отображать логическое значение, используйте CASE
и вместо этого отобразите строку .
Процедура не может быть вызвана как функция в SQL SELECT
оператор, поэтому вам придется использовать другой фрагмент кода PL / SQL; анонимный блок PL / SQL в порядке.
SQL> set serveroutput on
SQL> declare
2 v_categories varchar2(10) := 'ABC';
3 v_id number := 1;
4 v_boolean boolean;
5 v_error varchar2(200);
6 begin
7 get_categories(l_categories => v_categories,
8 l_id => v_id,
9 l_boolean => v_boolean,
10 l_error => v_error
11 );
12
13 dbms_output.put_line(case when v_boolean then 'true' else 'false' end ||' - '||
14 v_error
15 );
16 end;
17 /
true -
PL/SQL procedure successfully completed.
SQL>