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 попадает в окно вывода скрипта.

Другие вопросы по тегам