Попытка принять пользовательский ввод в PL sql, но не работает - PullRequest
0 голосов
/ 25 марта 2020
SET SEROUTPUT ON;  
accept designation char PROMPT 'enter designation' ;  
DECLARE      
    v_salary_inc number;  
      v_desg varchar2(20) := &designation;

BEGIN  
    v_salary_inc := case v_desg   
        when 'manager' then .3  
        when 'lead' then .18  
       when 'senior engg' then .1  
        else .05  
        end;  
        dbms_output.put_line('your salary increase is :' || v_salary_inc);         
END;  

Сообщение об ошибке -

ORA-06550: line 3, column 24:  
PLS-00201: identifier 'MANAGER' must be declared  
ORA-06550: line 3, column 12:  
PL/SQL: Item ignored  
ORA-06550: line 6, column 23:  
PLS-00320: the declaration of the type of this expression is incomplete or  
 malformed

1 Ответ

0 голосов
/ 25 марта 2020

Что вы сделали - отредактировав вопрос и добавив изображение вместо кода - было неправильно. Не все видят изображения. Вы бы предпочли отправить код.

В любом случае: вот что пошло не так с вашим кодом.

Используйте help , если вы не уверены, что делать. accept использует char, а не varchar2 и не имеет размера.

SQL> help accept

 ACCEPT
 ------

 Reads a line of input and stores it in a given substitution variable.

 ACC[EPT] variable [NUM[BER] | CHAR | DATE | BINARY_FLOAT | BINARY_DOUBLE]
 [FOR[MAT] format] [DEF[AULT] default] [PROMPT text | NOPR[OMPT]] [HIDE]

В коде, который вы написали: в строке № 3 пропущены одинарные кавычки. В остальном все в порядке (конечно, после включения вывода).

SQL> set serveroutput on
SQL>
SQL> ACCEPT designation char PROMPT 'enter designation: ' ;
enter designation: lead
SQL> DECLARE
  2      v_salary_inc number;
  3      v_desg varchar2(20) := '&designation';
  4  BEGIN
  5   v_salary_inc := case v_desg
  6          when 'manager' then .3
  7          when 'lead' then .18
  8          when 'senior engg' then .1
  9          else .05
 10          end;
 11   dbms_output.put_line('your salary increase is :' || v_salary_inc);
 12  END;
 13  /
your salary increase is :,18

PL/SQL procedure successfully completed.

SQL>
...