pl sql – PLS-00306: неправильное количество или типы аргументов при вызове ‘DISPLAY’

Вопрос: Мне нужно создать процедуру и сделать num1 (which = 5) и num2 (which = 3) входными параметрами вместо того, чтобы объявлять их как переменные, а затем присваивать им значения в скобках. У меня есть 3-я переменная (num3), которая является результатом num1^num2 (5 ^ 3), которая равна 125. Этот оператор pl/sql должен быть выполнен как

Вопрос:

Мне нужно создать процедуру и сделать num1 (which = 5) и num2 (which = 3) входными параметрами вместо того, чтобы объявлять их как переменные, а затем присваивать им значения в скобках.

У меня есть 3-я переменная (num3), которая является результатом num1^num2 (5 ^ 3), которая равна 125. Этот оператор pl/sql должен быть выполнен как exec my_power( 5, 3);

Я получаю PLS-00306: wrong number or types of arguments in call to ‘DISPLAY’

Вот мой код:

CREATE OR REPLACE PROCEDURE display ( num1 IN NUMBER, num2 IN NUMBER, num3 IN OUT NUMBER ) AS BEGIN num3 := num1**num2; dbms_output.put_line(‘num3 = ‘|| (num1**num2)); END; / SET SERVEROUTPUT ON; EXEC display (5, 3); Лучший ответ:

Ваша процедура требует 3 аргумента, но в вашем вызове вы предоставляете только два. Измените код звонка на

Declare result number; begin display (5, 3, result); end;

и он должен работать.

ОБНОВИТЬ

Вы объявили процедуру с двумя параметрами IN и одним параметром IN OUT – все они обязательны. Поэтому Oracle требует, чтобы вы вызывали вашу процедуру с тремя параметрами. У вас может возникнуть соблазн попробовать

display(5,3,8);

но это тоже не сработает – ваш третий параметр IN OUT, и Oracle нужно, чтобы вы предоставили переменную, где она может сохранить значение, которое вы назначили num3 в своей процедуре.

Но вам действительно не нужен третий параметр, если вы хотите распечатать результат своего расчета – измените свою процедуру на

CREATE OR REPLACE PROCEDURE display ( num1 IN NUMBER, num2 IN NUMBER ) AS BEGIN dbms_output.put_line(‘num3 = ‘|| (num1**num2)); END;

Затем вы можете вызвать его с помощью

EXEC display (5, 3); Ответ №1

Неправильно, пожалуйста, попробуйте

declare nu number; begin display(2, 3, nu); dbms_output.put_line(nu); end;

Оцените статью
Добавить комментарий