#sql #plsql #oracle10g #sqlplus
#sql #plsql #oracle10g #sqlplus
Вопрос:
Мое задание — написать модуль PLSQL для вставки данных в базу данных. При определенных условиях может потребоваться дополнительная информация, и пользователю следует запросить еще одну деталь. Это должно быть сделано непосредственно в PLSQL, а формулировка взята прямо из назначения.
Я исследовал тему и обнаружил, что некоторые люди сказали, что это невозможно сделать в PLSQL? Но функция ПРИГЛАШЕНИЯ ПРИНЯТЬ существует.
ACCEPT v_string PROMPT 'Enter your age: ';
Хотя это работает непосредственно из SQLPlus, в PLSQL это не работает, поскольку выдает мне эту ошибку:
PLS-00103: Encountered the symbol "V_STRING" when expecting one of the following: := . ( @ % ;
Может кто-нибудь дать некоторое представление о том, как я должен запрашивать пользователя у PLSQL, только при выполнении определенного условия (условие проверяется, когда вы получаете что-то еще из БД). Чтобы уточнить, мне нужна помощь только в том, как принимать входные данные.
Спасибо за ваше время.
Комментарии:
1. ACCEPT — это расширение SQL * plus, а не PL / SQL.
Ответ №1:
Существует уловка, которая позволит вам сделать что-то подобное, но (а) это своего рода взлом, (б) вам нужно авторизоваться на самом сервере базы данных, и (в) это работает только в Linux (и, возможно, в других версиях Unix).
Как правило, невозможно запросить ввод данных пользователем в PL / SQL, особенно если вы подключаетесь к базе данных на удаленном компьютере. Либо ваше назначение неверно, либо вы неправильно его поняли.
Программы PL / SQL предназначены для запуска на сервере базы данных, поэтому нет смысла запрашивать у пользователя ввод во время них. Используя ACCEPT
команду, SQL * Plus может запрашивать у пользователя ввод во время выполнения скрипта на стороне клиента. Затем SQL * Plus заменит введенное значение перед отправкой SQL или PL / SQL в базу данных.
Комментарии:
1. Профессор согласился и сказал, что вы должны просто передать его в качестве параметра в процедуру. Спасибо.
Ответ №2:
Ну, поскольку на самом деле это не часть SQL, а скорее инструменты разработчика, которые вы используете, вот те, которые я знаю:
- SQL* Plus: amp; Переменная
- Разработчик SQL: Вы можете создать процедуру или использовать :Variable, чтобы получить запрос на вставку параметра
Ответ №3:
Я проверил и попробовал следующие вещи, которые могут быть полезны для вас. Это просто пример, который я пробовал. Вы можете реализовать свою собственную логику.
declare
c1 varchar2(50);
begin
c1:='amp;enter_value';
dbms_output.put_line(c1);
exception
when others then
dbms_output.put_line(sqlerrm);
end;
‘amp;’ поможет вам запрашивать ввод у пользователя. Как только пользователь вводит некоторый ввод, он присваивается переменной, и вы можете использовать переменную везде, где захотите.
Надеюсь, это поможет вам.
Ответ №4:
Вы не можете получить пользовательский ввод в чистом PL / SQL. Это серверный язык для выражения бизнес-логики / базы данных.
Использование «amp;» для получения входных данных является функцией «sqlplus», а не стратегией PL / SQL. Если это было «задание», то вам нужно сказать учителю, что это недопустимое задание — или, может быть, это был вопрос с подвохом!