powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / ORA-00911: неверный символ
25 сообщений из 30, страница 1 из 2
ORA-00911: неверный символ
    #33263772
Здравствуйте!

Пытаюсь с помощью jdbc запустить такой запрос

Код: plaintext
1.
2.
3.
4.
5.
drop user "TESTUSER2" cascade;
CREATE USER "TESTUSER2"  PROFILE "DEFAULT" 
    IDENTIFIED BY "111" DEFAULT TABLESPACE "USERS" 
    ACCOUNT UNLOCK;
GRANT Connect To TestUser2;

Выдает:
java.sql.SQLException: ORA-00911: неверный символ

Я так понял, что Oracle в данном случае ругается на ;.

Протестировал на таком запросе
Код: plaintext
String query = "drop user \"TESTUSER2\" cascade;";
Если ; стоит, то выдается та же ошибка, если нет, то все нормально.

Подскажите, можно ли как нибудь решить данную проблему.
...
Рейтинг: 0 / 0
ORA-00911: неверный символ
    #33263814
Фотография Penkov Vladimir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Anatoliy
> Подскажите, можно ли как нибудь решить данную проблему.


не ставить ";"?

-----------------------------------
The Bat + My Gate

Posted via ActualForum NNTP Server 1.3
...
Рейтинг: 0 / 0
ORA-00911: неверный символ
    #33263821
Фотография Denis Popov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
У тебя три последовательных запроса, а не один. Выполни каждый из них самостоятельно.
/topic/144325
Posted via ActualForum NNTP Server 1.3
...
Рейтинг: 0 / 0
ORA-00911: неверный символ
    #33263827
deadyне ставить ";"?

Но мне нужно выплнять сразу несколько операций, (напр создание нескольких пользователей) в одном запросе.

Как быть в таком случае?
...
Рейтинг: 0 / 0
ORA-00911: неверный символ
    #33263842
авторУ тебя три последовательных запроса, а не один. Выполни каждый из них самостоятельно.
Мне нужноподгружать sql файл, который замечательно выполняется в SQL plus work sheet.

Неужели jdbc драйвер для Oracle на поддерживает сразу несколько операйий в одном запросе!!!???
...
Рейтинг: 0 / 0
ORA-00911: неверный символ
    #33263991
Фотография Denis Popov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SQL*Plus это SQL*Plus, который, кроме выполнения скриптов, имеет массу других возможностей. В спецификации
JDBC-интерфейсов (просто интерфейсов, а не именно оракловых), если не ошибаюсь, нет метода, позволяющего выполнить
скрипт "одним" куском, разве что надо самостоятельно раскладывать его на отдельные команды. Я бы, кстати, тоже бы очень
обрадовался, если бы нашель какий-нибудь (м.б. сторонний) инструмент выполнения скриптов через JDBC.
Posted via ActualForum NNTP Server 1.3
...
Рейтинг: 0 / 0
ORA-00911: неверный символ
    #33264100
Фотография Timm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
можно извратиться и выполнить через ант :)
...
Рейтинг: 0 / 0
ORA-00911: неверный символ
    #33264112
Фотография Timm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
хмм...
кстати как он это делает? ведь использует только jdbc, но позволяет выполнять скрипты! можно покопаться в исходниках при желании :)
...
Рейтинг: 0 / 0
ORA-00911: неверный символ
    #33264129
Понятно. Просто я работал с Access и MSSSQL там это дело нормально прокатывало. Придется разбирать на команды раз по-другому нельзя.
...
Рейтинг: 0 / 0
ORA-00911: неверный символ
    #33264175
Фотография Denis Popov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если есть уверенность, что на машине обязательно есть оракловый клиент, то можно, конечно, вызвать SQL*Plus через
Runtime.getRuntime().exec() и подсунуть ему скрипт.
Posted via ActualForum NNTP Server 1.3
...
Рейтинг: 0 / 0
ORA-00911: неверный символ
    #33265068
botpride
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
А кто мешает выполнить несколько запросов разными стейтментами, но в транзакции?
примерно так:
try{
conn.setAutoCommit(false);
conn.createStatement(...);
.......
conn.commit();
}catch(Exception e){conn.rollback();}
...
Рейтинг: 0 / 0
ORA-00911: неверный символ
    #33265344
Liner
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
а что батч из 3 команд нельзя выполнить в одной транзакции?
...
Рейтинг: 0 / 0
ORA-00911: неверный символ
    #33265347
Liner
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
cnn.setAutoCommit(false);

Statement s = cnn.createStatement();

s.addBatch("");
.....
s.addBatch("");

s.executeBatch();

cnn.commit();
...
Рейтинг: 0 / 0
ORA-00911: неверный символ
    #33265485
zalexaka
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
IMHO использовать транзакции для запросов типа:
DROP USER
CREATE USER
GRANT
бесполезно
...
Рейтинг: 0 / 0
ORA-00911: неверный символ
    #33265597
Фотография Timm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
zalexakaIMHO использовать транзакции для запросов типа:
DROP USER
CREATE USER
GRANT
бесполезно
не? это не imho, это rtfm :)
...
Рейтинг: 0 / 0
ORA-00911: неверный символ
    #33266037
Фотография Denis Popov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Liner wrote:
> а что батч из 3 команд нельзя выполнить в одной транзакции?

Осталось вручную разбить единый скрипт на 3 команды:)
Posted via ActualForum NNTP Server 1.3
...
Рейтинг: 0 / 0
ORA-00911: неверный символ
    #33266860
Igor-65
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
"begin bla-bla; ....; bla-bla; end;"

не спасет ?

(про единую транзакцию для нескольких ddl я не говорил ... )
...
Рейтинг: 0 / 0
ORA-00911: неверный символ
    #33266972
Igor-65
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
если точнее, то думаю, можно выполнить такой кусок одним вызовом

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
 String sql = "begin\n";
          sql = sql + "execute immediate 'drop user \"TESTUSER2\" cascade';";
          sql = sql + "execute immediate 'CREATE USER \"TESTUSER2\"  PROFILE \"DEFAULT\" ";
          sql = sql + "IDENTIFIED BY \"111\" DEFAULT TABLESPACE \"USERS\" ";
          sql = sql + "ACCOUNT UNLOCK'; \n";
          sql = sql + "execute immediate 'GRANT Connect To TestUser2';\n";
          sql = sql + "end;";
...
Рейтинг: 0 / 0
ORA-00911: неверный символ
    #33267055
[offtop]

Igor-65
Код: plaintext
1.
2.
3.
 String sql = "begin\n";
          sql = sql + "exec
          sql = sql + 


кто мало знаком с java: не знапоминайте этот фрагмент кода :)
Запомните этот:
Код: plaintext
1.
2.
3.
4.
String sql =  "begin\n" +
          "exec ...  " +
          "exec ...  " + 
          ...
...
Рейтинг: 0 / 0
ORA-00911: неверный символ
    #33267073
GMax
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
произведение не расчленённого ут[offtop]
кто мало знаком с java: не знапоминайте этот фрагмент кода :)
Запомните этот:
Я когда только начинал писать на Java, сделал сервлет, который выводил дикий отчет, путем того, что формировал выходный html в виде вот такого вот сложения строк.
Отчет формировался порядка 5 минут.
Потом переделал, убрал этот изврат, получилось несколько секунд :)
...
Рейтинг: 0 / 0
ORA-00911: неверный символ
    #33267087
Фотография Penkov Vladimir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
произведение

> Запомните этот:
> String sql ="begin\n" +"exec ... " +"exec ... " + ...
> Тема==Ответить




String sql = new
StringBuffer("begin").append("exec...").append("exec...").append("end").toString();
тогда уж так

-----------------------------------
The Bat + My Gate

Posted via ActualForum NNTP Server 1.3
...
Рейтинг: 0 / 0
ORA-00911: неверный символ
    #33267141
Фотография Denis Popov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ИМХО проблема не в том, чтобы вообще как-нибудь выполнить SQL-команды через JDBC, а в том, чтобы выполнить уже готовый сторонний скрипт, который является допустимым для того же SQL*Plus'а. К примеру:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
create table test (code varchar2( 64 ));
alter table test add constraint pk_test primary key (code)
/
insert into test (code) values ('One');
insert into test (code) values (';;Two;;');
insert into test (code) values ( 1 / 2 );
/
begin
  insert into test (code) values (';;;Three;;;');
  insert into test (code) values (';;;;Four;;;;');
  insert into test (code) values ( 2 / 3 );
end;
/
Команды разделяются ";" или "/", каждая команда может содержать символы, не являющиеся разделителями. Требуется выполнить вышеприведенный скрипт, НЕ МЕНЯЯ ЕГО.
...
Рейтинг: 0 / 0
ORA-00911: неверный символ
    #33267362
Deady произведение

> Запомните этот:
> String sql ="begin\n" +"exec ... " +"exec ... " + ...
> Тема==Ответить




String sql = new
StringBuffer("begin").append("exec...").append("exec...").append("end").toString();
тогда уж так

-----------------------------------
The Bat + My Gate

Posted via ActualForum NNTP Server 1.3

Не хочется опять приводить в пример байт код, скажу просто:"тогда уж так" - тоже не следует. Это ухудшает читаемость.

Данное преобразование проделает комилятор. Причём в версии 1.5 он будет использовать более быстрый класс StringBuilder, вместо стрингбуфера.
...
Рейтинг: 0 / 0
ORA-00911: неверный символ
    #33267688
Liner
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Denis PopovИМХО проблема не в том, чтобы вообще как-нибудь выполнить SQL-команды через JDBC, а в том, чтобы выполнить уже готовый сторонний скрипт, который является допустимым для того же SQL*Plus'а
А откуда вы знаете что SQL*Plus не разбирает команды?
Denis PopovОсталось вручную разбить единый скрипт на 3 команды:)
ИМХО Если их разобрать и засунуть в батч они уйдут на сервер и выполнятся одним пакетом что будет быстро, а в скрипте строки для выполнения символами перевода строки не заканчиваются?
...
Рейтинг: 0 / 0
ORA-00911: неверный символ
    #33267706
Liner
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ИМХО!
Объект Statement независит от драйвера базы данных, а символы раделители для SQL команд различные в разных диалектах, поэтому этот символ разделения приписывает сам драйвер уже, когда формирует пакет из команд при вызове executeBatch, и как бы пакет этот идет с признаком что команд несколько и что их разбирать нужно, и что на каждую команду свой код возврата
а при execute, executeUpdate, executeQuery идет как одна команда, и соответственно запрос выполняется как одна команда, ее не нужно разбирать и у нее один код возврата

и такое не только в jdbc, я например в TOAD не могу выполнить несколько команд разделенных ; - то же самое пишет
...
Рейтинг: 0 / 0
25 сообщений из 30, страница 1 из 2
Форумы / Java [игнор отключен] [закрыт для гостей] / ORA-00911: неверный символ
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]