1

Тема: запуск процедури Оракл

Хто підкаже як запустити процедуру з параметрами на виконання(щоб вона вивела результат виконання)
Написати процедуру, що дозволяє переглянути всі книги певного автора, при цьому його ім'я передається при виклику

create or replace procedure booksofavtor(lname out varchar2)is
a1 varchar2(120);
a2 varchar2(120);
a3 varchar2(120);
begin
select a.LAST_NAME,a.FIRST_NAME,b.NAME_BOOK into a1,a2,a3 from BOOKS b,AUTHORS a 
where a.LAST_NAME=lname and b.ID_AUTHOR=a.ID_AUTHOR;
end;

щоб вивело результат з селекта на екран

2

Re: запуск процедури Оракл

По-перше, вказаний селект може повернути більше ніж одну стрічку і тоді буде помилка. Як варіант, це можна виправити шляхом додавання умови

... and rownum = 1

Далі - умова не до кінця чітко описана. Якщо потрібно вивести в консолі змінні a1,a2,a3 - то це можна зробити через

dbms_output.put_line()

Якщо ж потрібно щоб процедура повертала ці значення і далі щоб можна було передати ці значення іншій процедурі і таке подібне, то ці параметри повинні бути оголошені як OUT. Тут виникає запитання до вже написаного коду - з якою саме ціллю цей параметр оголошено як OUT:

lname out varchar2

3

Re: запуск процедури Оракл

create or replace procedure booksofavtor(lname varchar2)is
a1 varchar2(120);
a2 varchar2(120);
a3 varchar2(120);
begin
select a.LAST_NAME,a.FIRST_NAME,b.NAME_BOOK into a1,a2,a3 from BOOKS b,AUTHORS a 
where a.LAST_NAME=lname and b.ID_AUTHOR=a.ID_AUTHOR and rownum=1;
end;
SET SERVEROUTPUT ON
DECLARE
BEGIN
booksofavtor('Акунін');
    DBMS_OUTPUT.enable;
    DBMS_OUTPUT.put_line( booksofavtor('Акунін'));
END;
Error report -
ORA-06550: line 5, column 27:
PLS-00222: no function with name 'BOOKSOFAVTOR' exists in this scope
ORA-06550: line 5, column 5:
PL/SQL: Statement ignored
06550. 00000 -  "line %s, column %s:\n%s"
*Cause:    Usually a PL/SQL compilation error.

4 Востаннє редагувалося frz (21.07.2020 18:22:19)

Re: запуск процедури Оракл

create or replace procedure booksofavtor

Потрібно вказувати назву схеми, наприклад schema1.booksofavtor

І відповідно викликати процедуру потрібно з назвою схеми. Схему потрібно спершу створити перед використанням.

Виклик DBMS_OUTPUT.put_line() в даному випадку потрібно робити всередині процедури, а в якості вхідного параметру для put_line потрібно вказувати змінні a1 і т.д. Все ж варто ще раз перепитати, чи дійсно згідно з умовами задачі достатньо виводити текст в консолі.

майже оффтоп

До речі, вам на курсах надали доступ до їхнього сервера, чи ви встановили вдома самостійно? Просто цікаво.