Принять пользовательский ввод и установить присвоение переменной PL / SQL - PullRequest
0 голосов
/ 24 сентября 2019

Я пытаюсь принять пользовательский ввод внутри хранимой процедуры и назначить его переменной VARCHAR.По какой-то причине я получаю ошибку

PLS-00201: идентификатор 'userinput' должен быть объявлен.

Есть идеи?Я должен использовать это позже, чтобы увидеть, сколько раз входные данные появляются в таблице.

    CREATE OR REPLACE PROCEDURE nums
    AS
       x_num VARCHAR(20);
    BEGIN
       x_num := &input;
       dbms_output.put_line('You entered: ' || x_num);
    END;
    /

Ответы [ 2 ]

2 голосов
/ 24 сентября 2019

Процедуры не могут получить пользовательский ввод в ответ на приглашение, PLSQL НЕ является интерактивным.Когда у вас есть это, вы на самом деле не общаетесь с базой данных.На самом деле происходит замена символов, если SQLPLUS или другой интерфейс (Toad, SQL Developer, ...) фактически перехватывает символ, запрашивает ввод и физически изменяет сценарий перед отправкой его в базу данных.Если вы хотите хранимую процедуру, вам нужно будет использовать параметр, как предложено @HereGoes, а затем предоставить пользователю скрипт следующим образом:

Begin 
    nums(pInput => &Input);
end ;

Или предоставить интерфейс приложения для получения входного значения и вызова процедурыили разрешить доступ пользователей через SQLPLUS или другой интерфейс и разрешить им вводить сценарий - не рекомендуется.

1 голос
/ 24 сентября 2019

Я предлагаю сделать ввод параметром.

    CREATE OR REPLACE PROCEDURE nums (pInput IN VARCHAR2)
    AS
       x_num VARCHAR(20);
    BEGIN
       x_num := pInput ;
       dbms_output.put_line('You entered: ' || x_num);
    END;
    /
...