Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Java [игнор отключен] [закрыт для гостей] / Oracle JDBC - выполнить последовательность команд / 16 сообщений из 16, страница 1 из 1
08.12.2004, 12:43
    #32818454
Denis Popov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Oracle JDBC - выполнить последовательность команд
Тема отчасти перекликается с sqlplus и java , хотел спросить о следующем: существует ли какой-нибудь вариант Statement'а, позволяющий выполнить скрипт - поледовательность команд - за один вызов? Что-то вроде:

Код: plaintext
1.
2.
3.
4.
5.
st.execute(
  "create table test (test_id number(9));\n" +
  "alter table test add constraint pk_test primary key (test_id);\n" +
  "insert into test (test_id) values (1);"
);
...
Рейтинг: 0 / 0
08.12.2004, 12:53
    #32818494
stdio
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Oracle JDBC - выполнить последовательность команд
Denis PopovТема отчасти перекликается с sqlplus и java , хотел спросить о следующем: существует ли какой-нибудь вариант Statement'а, позволяющий выполнить скрипт - поледовательность команд - за один вызов? Что-то вроде:

Код: plaintext
1.
2.
3.
4.
5.
st.execute(
  "create table test (test_id number(9));\n" +
  "alter table test add constraint pk_test primary key (test_id);\n" +
  "insert into test (test_id) values (1);"
);
Цикл нужен?
А какой в этом заложен смысл?
...
Рейтинг: 0 / 0
08.12.2004, 13:09
    #32818549
S.A.T.
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Oracle JDBC - выполнить последовательность команд
Я конечно не спец по Java и JDBS (только начал разбираться), но может запихнуть это в процедуру БД и вызывать уже процедуру или как в Oracle

declare
begin
(ваши команды)
end;
...
Рейтинг: 0 / 0
08.12.2004, 13:37
    #32818647
Denis Popov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Oracle JDBC - выполнить последовательность команд
Создаю объекты БД через JDBC. Пробегаю по набору файлов, представляющие собой sql-команды, и последовательно их выполняю. Так для каждой команды надо создавать свой файл, к примеру, для комментариев к таблице и ее полям:
Код: plaintext
1.
2.
3.
4.
5.
comment on table my_table is 'Table comment';
comment on column my_table.column1 is 'Column1 comment';
comment on column my_table.column2 is 'Column2 comment';
...
comment on column my_table.columnN is 'ColumnN comment';
и т.д, т.е. по файлу на каждый чих. Хотелось бы сделать это более компактно.

2S.A.T.: это хорошо для DML, а для DDL придется использовать Native SQL (вроде execute immediate), чем бы не хотелось злоупотреблять.
...
Рейтинг: 0 / 0
08.12.2004, 13:45
    #32818672
Timm
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Oracle JDBC - выполнить последовательность команд
Maybe Statement.addBatch()?
...
Рейтинг: 0 / 0
08.12.2004, 14:10
    #32818733
Timm
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Oracle JDBC - выполнить последовательность команд
Действительно работает:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
 import  java.sql.*;
 import  java.io.*;


 public   class  testBatch {
	 public   static   void  main(String[] args) {
		Connection conn =  null ;
		 try  {
			 Class .forName("oracle.jdbc.driver.OracleDriver");
			conn = DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:info", "scott", "tiger");
		}  catch  (Exception e) {
			System.out.println("Error: " + e);
		} //try
		 if  (conn !=  null ) {			
			 try  {
				Statement stmt = conn.createStatement();
				stmt.addBatch("CREATE TABLE tmp1(x INT)");
				stmt.addBatch("CREATE TABLE tmp2(y INT)");
				stmt.executeBatch();
			}  catch  (Exception e) {
				e.printStackTrace();
			}  finally  {
				 try  {
					 if  (conn !=  null ) {
						conn.close(); conn =  null ;
					}
				}  catch  (Exception ignore) {
				} //try
			}
		}
	}
};
...
Рейтинг: 0 / 0
08.12.2004, 15:14
    #32818931
Denis Popov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Oracle JDBC - выполнить последовательность команд
Но тогда сперва надо разобрать исходный скрипт на команды. В принципе, если найти или сделать такой парсер, то можно и execute() обойтись:)
...
Рейтинг: 0 / 0
08.12.2004, 15:22
    #32818958
funikovyuri
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Oracle JDBC - выполнить последовательность команд
Denis Popov
Но тогда сперва надо разобрать исходный скрипт на команды

А нельзя для этого использовать какую-нибудь последовательность символов, по типу GO в MS Query Analyser?
...
Рейтинг: 0 / 0
08.12.2004, 15:34
    #32818997
Denis Popov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Oracle JDBC - выполнить последовательность команд
В принципе можно. Можно еще в качестве разделителя выбрать нечто вроде REM GO , тогда скрипт по-прежему можно будет выполнять в SQL*Plus, если потребуется. Т.е. это путь к написанию собственного парсера, может он и является единственно возможным.
...
Рейтинг: 0 / 0
08.12.2004, 15:39
    #32819005
Timm
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Oracle JDBC - выполнить последовательность команд
Denis PopovНо тогда сперва надо разобрать исходный скрипт на команды. В принципе, если найти или сделать такой парсер, то можно и execute() обойтись:)
Если команды разделены ";" то это не проблема.
...
Рейтинг: 0 / 0
08.12.2004, 16:15
    #32819089
Denis Popov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Oracle JDBC - выполнить последовательность команд
В DML точка с запятой не обязательно означают конец комадны. К примеру, если она встречается где-то между begin и end. Да в DDL тоже, хотя я далек от соблазна подобным образом называть объекты:)
Код: plaintext
1.
create table ";" (";" number( 9 ));
...
Рейтинг: 0 / 0
08.12.2004, 16:28
    #32819132
funikovyuri
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Oracle JDBC - выполнить последовательность команд
Denis Popov

А кто формирует список комманд? Т.е. откуда он береться?
...
Рейтинг: 0 / 0
08.12.2004, 16:38
    #32819165
Denis Popov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Oracle JDBC - выполнить последовательность команд
Я сам и формирую. Написаны sql-скрипты для вытаскивания метаданных схемы, в результате получаются скрипты на создание всех требуемых объектов - таблиц, процедур и т.д. До некоторых пор получившиеся скрипты выполнялись через SQL*Plus, поэтому я смело мог в одном файле объединять несколько команд. Сейчас потребовалось тоже самое делать через JDBC THIN. Пришлось все делить на атомарные команды.

Это я к тому, что вставить собственный разделитель в процессе формирования файлов непроблематично, если окажется, что это самый разумный выход.
...
Рейтинг: 0 / 0
08.12.2004, 16:46
    #32819199
funikovyuri
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Oracle JDBC - выполнить последовательность команд
вот-вот!

Не знаю как в Oracle, но для MS SQL это стандартное решение отделения "batch'ей" - так они там называются
...
Рейтинг: 0 / 0
08.12.2004, 19:07
    #32819518
stdio
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Oracle JDBC - выполнить последовательность команд
Denis PopovЯ сам и формирую. Написаны sql-скрипты для вытаскивания метаданных схемы, в результате получаются скрипты на создание всех требуемых объектов - таблиц, процедур и т.д. До некоторых пор получившиеся скрипты выполнялись через SQL*Plus, поэтому я смело мог в одном файле объединять несколько команд. Сейчас потребовалось тоже самое делать через JDBC THIN. Пришлось все делить на атомарные команды.

Это я к тому, что вставить собственный разделитель в процессе формирования файлов непроблематично, если окажется, что это самый разумный выход.Тогда уж скидывай в XML-формате...
...
Рейтинг: 0 / 0
08.12.2004, 19:10
    #32819523
Denis Popov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Oracle JDBC - выполнить последовательность команд
Хотелось бы оставить возможность их выполнения из-под SQL*Plus.
...
Рейтинг: 0 / 0
Форумы / Java [игнор отключен] [закрыт для гостей] / Oracle JDBC - выполнить последовательность команд / 16 сообщений из 16, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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