SQL Запросить номер и отобразить> чем номер
Я новичок в SQL, и у меня есть следующий вопрос для завершения:
Напишите код SQL, чтобы запросить число, и отобразите всех сотрудников, которые зарабатывают больше комиссионных, чем предоставленное число. В подсказке должно быть написано "деньги, пожалуйста".
Итак, первое утверждение, которое у меня есть:
SELECT E.ENAME, E.COMM
FROM EMP E
WHERE e.comm > &MoneyPlease;
Но это работает только один раз, потому что, как только вы задали значение для MoneyPlease, оно сохраняется, и если я введу текст, это приведет к ошибкам.
Поэтому я пытаюсь заставить его запрашивать значение при каждом запуске, преобразовывать его в число, вызывать, если введен нечисловой параметр.
Ниже приведено то, что у меня есть, я пытался перемещать компоненты, например, комбинируя выборки в одну строку, а формы - в одну строку. Но я продолжаю получать ошибки независимо от того, какие изменения я делаю, и я недостаточно знаком, чтобы понять, какие из них означают, что я сдал в аренду правильное направление. Чувствуется, что в этот момент я просто получаю удар в темноте.
Любое направление будет оценено.
Accept MoneyPlease prompt 'Money Please '
Column MoneyPlease NEW_Value MoneyPlease
select nvl(numeric('&MoneyPlease'), '*Unknown*') MoneyPlease
from Dual,
Prompt 'Is this correct?'
Prompt 'Enter to continue, CTRL + C to esc'
Pause
SELECT E.ENAME, E.COMM
FROM EMP E
WHERE e.comm > &MoneyPlease;
1 ответ
Oracle не имеет встроенного numeric()
функция, и этот запрос не завершен должным образом - он заканчивается запятой вместо точки с запятой. В SQL*Plus с настройками по умолчанию (особенно sqlblanklines
по умолчанию off
) этот запрос просто игнорируется; такое SQL Developer (или с set sqlblanklines on
) остальная часть сценария обрабатывается как часть того же запроса, который заканчивается ORA-00933: SQL command not properly ended
,
Оба клиента понимают accept
, который вы уже используете, но также понимаете number
ограничение типа данных:
ЧИСЛО]
Делает переменную типом данных NUMBER. Если ответ не совпадает с типом данных, ACCEPT выдает сообщение об ошибке и запрашивает снова.
Если вы упростите свой сценарий до:
accept MoneyPlease number prompt 'Money Please '
SELECT E.ENAME, E.COMM
FROM EMP E
WHERE e.comm > &MoneyPlease;
затем, если вы запустите это через SQL*Plus и дадите нечисловое значение, вам просто будет предложено ввести число:
SQL> @your_script
Money Please abc
SP2-0425: "abc" is not a valid NUMBER
Money Please 123
old 3: WHERE e.comm > &MoneyPlease
new 3: WHERE e.comm > 123
... -- query results
В SQL Developer происходит то же самое, но запрос значения for является всплывающим диалогом, и сообщение SP-0425 попадает в окно вывода скрипта.