powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / Oracle JDBC - выполнить последовательность команд
16 сообщений из 16, страница 1 из 1
Oracle JDBC - выполнить последовательность команд
    #32818454
Фотография 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
Oracle JDBC - выполнить последовательность команд
    #32818494
Фотография stdio
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
Oracle JDBC - выполнить последовательность команд
    #32818549
S.A.T.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Я конечно не спец по Java и JDBS (только начал разбираться), но может запихнуть это в процедуру БД и вызывать уже процедуру или как в Oracle

declare
begin
(ваши команды)
end;
...
Рейтинг: 0 / 0
Oracle JDBC - выполнить последовательность команд
    #32818647
Фотография Denis Popov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Создаю объекты БД через 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
Oracle JDBC - выполнить последовательность команд
    #32818672
Фотография Timm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Maybe Statement.addBatch()?
...
Рейтинг: 0 / 0
Oracle JDBC - выполнить последовательность команд
    #32818733
Фотография Timm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Действительно работает:
Код: 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
Oracle JDBC - выполнить последовательность команд
    #32818931
Фотография Denis Popov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Но тогда сперва надо разобрать исходный скрипт на команды. В принципе, если найти или сделать такой парсер, то можно и execute() обойтись:)
...
Рейтинг: 0 / 0
Oracle JDBC - выполнить последовательность команд
    #32818958
funikovyuri
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Denis Popov
Но тогда сперва надо разобрать исходный скрипт на команды

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

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

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

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

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


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