Разница между sqlplus и sqldeveloper?

У меня есть файл сценария sql, который создает таблицы и вставляет данные.

Сервер работает на Oracle 10g.

Когда я использую sqldeveloper (удаленный компьютер) и запускаю свой скрипт, все в порядке. Но когда я захожу на сервер и запускаю тот же сценарий в той же базе данных, схеме, пользователе с sqlplus, появляется какая-то ошибка (целостность, уникальность ...)?

В чем проблема, почему у меня не было проблемы с sqldeveloper, но были проблемы с sqlplus? Что может быть причиной этого?


person La Chamelle    schedule 24.03.2011    source источник


Ответы (5)


Хорошо, я обнаружил проблемы:

  • Первым был комментарий (/ * комментарий * / не поддерживаются или - комментарий в конце строки)
  • В моем скрипте был какой-то анонимный блок, и я поставил некоторые / в начале (по ошибке) и в конце. Но в sqlplus / в начале повторно выполните предыдущий запрос.
  • После удаления комментария у меня появилась пустая строка в некоторой таблице создания, а у sqlplus проблема с пустой строкой внутри таблицы создания.
person La Chamelle    schedule 26.03.2011
comment
У меня такая же проблема. У меня также были некоторые утверждения, оканчивающиеся точкой с запятой, за которой следовала косая черта (). SQLPlus повторно запустил бы инструкцию, но SQL Developer - нет. - person Adrian Brown; 12.09.2012
comment
он также может помочь добавить комментарий к каждой таблице, так что /, сгенерированный SQLDeveloper в экспорте, будет предшествовать оператору COMMENT ON TABLE, а не оператору CREATE TABLE, поэтому при выполнении команды во второй раз ошибка не возникает. . В любом случае это все очень печально. - person Pierluigi Vernetto; 01.09.2014
comment
проверьте также stackoverflow.com/questions/1079949/. вы можете смягчить проблему, используя SQLDeveloper 4 и играя с параметром терминатора - person Pierluigi Vernetto; 01.09.2014

Запускаю свой скрипт, все идеально. Но когда я захожу на сервер и запускаю тот же сценарий в той же базе данных, схеме, пользователе с sqlplus, появляется какая-то ошибка (целостность, уникальность ...)?

Казалось бы, ваш скрипт обрабатывает создание и вставку, но не удаление существующих данных. Не взглянув на ваш скрипт, невозможно сказать это, но я могу смоделировать то же самое с моими тестовыми данными.

test.sql:

create table parts ( id number primary key, 
                     description varchar2(240)
                   )
/

insert into parts values(1,'Keyboard');
insert into parts values(2,'Mouse');
insert into parts values(3,'Monitor');

Запускаем скрипт в SQL Developer:

Запуск в SQL * Plus - тот же пользователь, схема, база данных:

SQL> @/home/oracle/Desktop/test.sql
create table parts ( id number primary key,
             *
ERROR at line 1:
ORA-00955: name is already used by an existing object


insert into parts values(1,'Keyboard')
*
ERROR at line 1:
ORA-00001: unique constraint (HR.SYS_C0016596) violated


insert into parts values(2,'Mouse')
*
ERROR at line 1:
ORA-00001: unique constraint (HR.SYS_C0016596) violated


insert into parts values(3,'Monitor')
*
ERROR at line 1:
ORA-00001: unique constraint (HR.SYS_C0016596) violated
person Sathyajith Bhat    schedule 26.03.2011

Проблемы, с которыми я столкнулся в аналогичной должности:

  • Любое НАЧАЛО ... КОНЕЦ; внешние блоки должны сопровождаться строкой /.
  • Semicolons cannot have anything after them
    • this is good;
    • this is bad; -- comment
    • this is bad;;
  • Sql commands (select, insert etc) cannot have empty lines in the middle
    • SELECT 'this is good' FROM Dual
    • SELECT 'this is bad' [empty line with no text] FROM Dual

Спасибо за предупреждение о /* multi-line comments */ - я добавил это в свой тестовый сценарий.

person Ruskin    schedule 16.01.2015

Для полноты картины вполне возможно, что SQL Developer и sqlplus работают с разными параметрами сеанса nls. Для проверки запустите эту команду в sqlplus и SQL Developer и сравните результаты:

SELECT * FROM nls_session_parameters;

Если есть какая-то разница, вы можете установить нужные параметры nls_session_parameters, например:

ALTER SESSION SET NLS_DATE_FORMAT='DD/MM/RR';
ALTER SESSION SET NLS_TIMESTAMP_FORMAT='DD/MM/RR HH24:MI:SSXFF';
person Uphill_ What '1    schedule 03.12.2015

Еще одно возможное отличие:

Существует параметр сеанса, называемый «NLS_DATE_FORMAT», который определяет формат, используемый для отображения дат при выборе без вызова TO_CHAR ().

Я считаю, что на моем рабочем месте значение NLS_DATE_FORMAT по умолчанию в базе данных установлено как «ДД-ММ-ГГГГ», но в разработчике SQL по умолчанию используется значение «ДД-МЕС-ГГ».

Следовательно, следующее будет работать для наших пользователей SQLPlus, но не для пользователей SQL Developer, поскольку дата сначала будет автоматически преобразована в строку с использованием NLS_DATE_FORMAT, прежде чем будет проанализирована с форматом, переданным в to_date ().

select to_date(sysdate, 'DD-MM-YYYY') from DUAL;

В этом случае SQLDeveloper выдаст следующую ошибку:

ORA-01858: был обнаружен нечисловой символ вместо ожидаемого числа.

01858. 00000 - «Обнаружен нечисловой символ вместо ожидаемого числа»

* Причина: входные данные, которые нужно преобразовать с использованием модели формата даты, были неверными. Входные данные не содержали числа, где число требовалось моделью формата.

* Действие: исправьте входные данные или модель формата даты, чтобы элементы совпадали по количеству и типу. Затем повторите операцию.

person Maaark    schedule 23.03.2018
comment
Мааарк, извините за неверную точку зрения. Я попытался выполнить инструкцию в SQLPlus и SQL Developer (19.1.0), ошибок не обнаружено. - person sandy v; 22.08.2019
comment
Ты прав. Я обновил ответ, чтобы отразить мое текущее понимание проблемы. - person Maaark; 28.08.2019