Предложение Oracle PL / SQL SELECT INTO считает, что ему нужно другое INTO - PullRequest
1 голос
/ 15 октября 2019

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

скелетный код и тест:

create or replace function test(id varchar2, area float) return float is
    theRow forest%ROWTYPE;
begin
    select * into theRow from forest where Forest_No = id;
    return area / theRow.Area;
end;

begin
    select test('1', 16000) from dual;
end;

Вывод:

[2019-10-14 21:19:10] [65000][6550] ORA-06550: line 2, column 5:
[2019-10-14 21:19:10] PLS-00428: an INTO clause is expected in this SELECT statement

Я в недоумении, что делать здесь, насколько я могу сказать, документация и примеры используют то же самоепорядок и синтаксис. Я пытался переместить предложение в конец до конца, как в Postgresql, но это не сработало.

Что я здесь пропустил?

1 Ответ

5 голосов
/ 15 октября 2019

Проблема в операторе вызова.

Всякий раз, когда оператор select используется в блоке plsql, он должен иметь предложение into для присвоения возвращаемого значения переменной.

Вы должны удалить begin и end из вашего телефонного кода:

--begin -- remove this
    select test('1', 16000) from dual;
--end; -- remove this

Или, если вы хотите использовать его в блоке plsql, добавьте в предложение:

Declare
Area_ float(precision);
begin
    select test('1', 16000) into area_ from dual;
    -- use area_ in your code wherever required
    dbms_output.put_line('area: ' || area_);
end;

Cheers !!

...