Вопрос:
Мне нужно создать процедуру и сделать 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;