Почему мой sql-запрос работает в sqldeveloper, а не из командной строки, использующей sqlcl?

select * from test where test like '%test%'

Это возвращает ожидаемые данные с использованием sqldeveloper, но из командной строки с использованием sqlcl, когда я набираю эту команду и нажимаю ввод, я просто вижу 2. Если я снова нажимаю ввод, я вижу 3.

Что мне здесь не хватает? Я не вижу ничего в документах sqlcl, которые покрывают это.

3 ответа

Он ведет себя так же, как SQL*Plus. Вы ввели одну строку текста в буфер команд, но вы не сказали клиенту, что это полный оператор, или не сказали ему выполнить его. Он показывает запрос номера строки, чтобы показать, что он ожидает большего ввода.

Вы можете завершить оператор точкой с запятой или поставить косую черту (/) на новой линии самостоятельно; из этой документации:

Завершение SQL-команды
Вы можете завершить команду SQL одним из трех способов:

  • с точкой с запятой (;)
  • с косой чертой (/) на отдельной строке
  • с пустой строкой

Точка с запятой (;) сообщает SQL*Plus, что вы хотите выполнить команду. Введите точку с запятой в конце последней строки команды... и нажмите Return или щелкните Выполнить. SQL*Plus обрабатывает команду, а также сохраняет команду в буфере SQL.... Если вы ошибочно нажали клавишу "Return" перед вводом точки с запятой, SQL*Plus предложит вам ввести номер строки для следующей строки вашей команды. Введите точку с запятой и нажмите Return еще раз или нажмите Выполнить, чтобы выполнить команду.

Косая черта (/) в строке также указывает SQL*Plus, что вы хотите выполнить команду. Нажмите Return в конце последней строки команды. SQL*Plus запрашивает другой номер строки. Введите косую черту и нажмите Return еще раз или нажмите Выполнить. SQL*Plus выполняет команду и сохраняет ее в буфере.

SQL Devleoper также поддерживает их, используя точку с запятой (по умолчанию) в качестве символа завершения SQL, и позволяя этому или косой черте завершить оператор. Это позволяет вам исключить его из последнего оператора в скрипте, чего нет в SQL*Plus - в этом случае оператор никогда не будет выполнен. Я думаю, что SQLcl ведет себя так же, как SQL*Plus для этого тоже.

(Я понимаю, что SQLcl не совсем то же самое, но большая часть документации по SQL*Plus относится к SQL Developer и его более поздней версии SQLcl. Вы можете узнать больше об этом в блоге ThatJeffSmith.)

Вы загружаете буфер, и инструмент запрашивает у вас следующую строку. Чтобы выполнить то, что находится в буфере, введите косую черту ('/') и нажмите ввод.

Я подозреваю, что вам нужно завершить ваш запрос точкой с запятой.

select * from test where test like '%test%';
Другие вопросы по тегам