2017-01-27 12 views
0

Привет, Я пытаюсь вызвать процедуру, которая принимает два параметра, и оба они должны быть взяты у пользователя. Так что я придумал этот код, который не работает. (Я работаю с SQL Developer)Принимая 2 входа от пользовательской и вызывающей процедуры в PLSQL

create or replace procedure upd(x in binary_double , y in char) as 
res binary_double; 
begin 
    dbms_output.put_line('Hello World'); 
end; 

/*User input and calling of function*/ 
accept X binary_double prompt 'Enter percentage X (lower case)'; 
accept Y char(2) prompt 'Enter product type (lower case)'; 
call upd(&X, &Y); 

Это дает следующее сообщение об ошибке после наведения дважды для ввода

old:call upd(&X, &Y) 
new:call upd(12, a) 

Error starting at line 69 in command: 
call upd(&X, &Y) 
Error report: 
SQL Error: ORA-06576: not a valid function or procedure name 
06576. 00000 - "not a valid function or procedure name" 
*Cause: Could not find a function (if an INTO clause was present) or 
      a procedure (if the statement did not have an INTO clause) to 
      call. 
*Action: Change the statement to invoke a function or procedure 

Он работает плавно, если я вызываю процедуру, как этот "вызов UPD (& X, 'a') ", но терпит неудачу, если я его назову В этом вопросе почему это происходит и как избавиться от него?

ответ

1

Во-первых, accept не позволяет указать обугленного длину, только SQL * Plus в стиле формат, так что приглашение должно быть:

accept Y char format a2 prompt 'Enter product type (lower case): ' 

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

Во-вторых, вам нужно указать строковые значения. Попробуйте следующее:

call upd(&X, '&Y') 
+0

Эй, это сработало! Благодаря! – omjego

 Смежные вопросы

  • Нет связанных вопросов^_^