Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Java [игнор отключен] [закрыт для гостей] / ORA-00911: неверный символ / 25 сообщений из 30, страница 1 из 2
12.09.2005, 12:26
    #33263772
ORA-00911: неверный символ
Здравствуйте!

Пытаюсь с помощью 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
12.09.2005, 12:35
    #33263814
Penkov Vladimir
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ORA-00911: неверный символ
Anatoliy
> Подскажите, можно ли как нибудь решить данную проблему.


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

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

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

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

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

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

Statement s = cnn.createStatement();

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

s.executeBatch();

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

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

не спасет ?

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

Код: 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
13.09.2005, 17:10
    #33267055
ORA-00911: неверный символ
[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
13.09.2005, 17:15
    #33267073
GMax
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ORA-00911: неверный символ
произведение не расчленённого ут[offtop]
кто мало знаком с java: не знапоминайте этот фрагмент кода :)
Запомните этот:
Я когда только начинал писать на Java, сделал сервлет, который выводил дикий отчет, путем того, что формировал выходный html в виде вот такого вот сложения строк.
Отчет формировался порядка 5 минут.
Потом переделал, убрал этот изврат, получилось несколько секунд :)
...
Рейтинг: 0 / 0
13.09.2005, 17:18
    #33267087
Penkov Vladimir
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ORA-00911: неверный символ
произведение

> Запомните этот:
> 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
13.09.2005, 17:37
    #33267141
Denis Popov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ORA-00911: неверный символ
ИМХО проблема не в том, чтобы вообще как-нибудь выполнить 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
13.09.2005, 19:03
    #33267362
ORA-00911: неверный символ
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
14.09.2005, 06:34
    #33267688
Liner
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ORA-00911: неверный символ
Denis PopovИМХО проблема не в том, чтобы вообще как-нибудь выполнить SQL-команды через JDBC, а в том, чтобы выполнить уже готовый сторонний скрипт, который является допустимым для того же SQL*Plus'а
А откуда вы знаете что SQL*Plus не разбирает команды?
Denis PopovОсталось вручную разбить единый скрипт на 3 команды:)
ИМХО Если их разобрать и засунуть в батч они уйдут на сервер и выполнятся одним пакетом что будет быстро, а в скрипте строки для выполнения символами перевода строки не заканчиваются?
...
Рейтинг: 0 / 0
14.09.2005, 07:15
    #33267706
Liner
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ORA-00911: неверный символ
ИМХО!
Объект Statement независит от драйвера базы данных, а символы раделители для SQL команд различные в разных диалектах, поэтому этот символ разделения приписывает сам драйвер уже, когда формирует пакет из команд при вызове executeBatch, и как бы пакет этот идет с признаком что команд несколько и что их разбирать нужно, и что на каждую команду свой код возврата
а при execute, executeUpdate, executeQuery идет как одна команда, и соответственно запрос выполняется как одна команда, ее не нужно разбирать и у нее один код возврата

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


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