Разница между sqlplus и sqldeveloper? - PullRequest
5 голосов
/ 24 марта 2011

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

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

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

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

Ответы [ 5 ]

4 голосов
/ 26 марта 2011

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

  • Первым был комментарий (/ * комментарий * / не поддерживается или - комментарий в конце строки)
  • У меня было несколькоанонимный блок в моем скрипте, и я поставил некоторые / в начале (по ошибке) и в конце.Но в sqlplus, / в начале, повторно выполнить предыдущий запрос.
  • После удаления комментария я получил пустую строку в некоторой таблице создания, и в sqlplus возникла проблема с пустой строкой внутри таблицы создания.
1 голос
/ 16 января 2015

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

  • Любой НАЧАТЬ ... КОНЕЦ; внешние блоки должны сопровождаться строкой /.
  • Точка с запятой не может иметь после них ничего
    • this is good;
    • this is bad; -- comment
    • this is bad;;
  • Команды Sql (выбор, вставка и т. Д.) Не могут содержать пустые строки в середине
    • SELECT 'this is good' FROM Dual
    • SELECT 'this is bad' [empty line with no text] FROM Dual

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

1 голос
/ 26 марта 2011

Я запускаю свой сценарий, все идеально. Но когда я захожу на сервер и запускаю тот же скрипт в той же базе данных, схема, у пользователя с 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
0 голосов
/ 23 марта 2018

Другое отличие:

SQLPlus может обрабатывать попытки конвертировать дату в дату.

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

но SQLDeveloper выдаст следующую ошибку

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

  1. 00000 - «не числовой символ был найден там, где ожидалось число»

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

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

0 голосов
/ 03 декабря 2015

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

SELECT * FROM nls_session_parameters;

В случае, если есть какая-то разница, вы можете установить необходимые параметры nls_session_parameter:

...