Эти 2 линии ваша проблема, однако, не по причинам, указанным в другом ответе:
&n_no_1;
&n_no_2;
В SQL можно использовать амперсанд (&), чтобы вызвать что-то под названием «Макрозамещение».
Когда компилятор сталкивается с чем-то вроде этого (то есть &n_no1
), он предлагает пользователю ввести значение для его замены в своем месте.
Итак, если вы введете «Привет». Ваш код будет выглядеть так:
DBMS_output.put_line('Enter Value for no 1');
Hello;
И как вы можете видеть, что потерпит неудачу, если бы вы только что напечатали это.
То, что вы хотите сделать, это присвоить это значение переменной, например:
n_no_1 := '&n_no_1';
, который получает «заменить» этим:
n_no_1 := 'Hello';
, который компилирует - и работает - просто хорошо.
Что все сказано, это НЕ лучший способ сделать это, хотя это, кажется, учебное упражнение?
Посмотрите на PROMPT
и ACCEPT
ключевые слова ..вы можете использовать те, в SQL (за пределы BEGIN/END DECLARE/блока), чтобы захватить значения первыми в аккуратной моде :)
http://docs.oracle.com/cd/E11882_01/server.112/e16604/ch_twelve032.htm#SQPUG052
http://docs.oracle.com/cd/E11882_01/server.112/e16604/ch_twelve005.htm#SQPUG026
Найдены дополнительное звено здесь стоит хорошо читать , Объясняет намного больше, чем то, что вы смотрите, но обсуждает переменные подстановки и другие вещи (похожие и некоторые другие неродственные вещи :))
https://blogs.oracle.com/opal/entry/sqlplus_101_substitution_varia
компиляция теперь успешно. Я немного меняю код, но я не получаю его. этот код теперь 'SET SERVEROUTPUT ON SIZE 1000000; DECLARE n_number1 number (8,2): = & n_number1; Номер n_number2 (8,2): = & n_number2; BEGIN DBMS_OUTPUT.PUT_LINE (n_number1); DBMS_OUTPUT.PUT_LINE (n_number2); END; /' –
Извините, но это неправильно с самого начала. «Макрозамещение» не «в SQL». Подстановка макросов - это особенность SQLPlus и других интерфейсов, основанных на нем, таких как SQL Developer. Подстановка выполняется до того, как SQL Developer отправляет текстовую строку (программу PL/SQL) интерпретатору («компилятор») для обработки. Ответ Матфея правильный, а ваш неверен. – mathguy
@ditto это то, что я сделал до начала, и теперь работает 'n_number1 number (8,2): = & n_number1;' –