Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Java [игнор отключен] [закрыт для гостей] / Вопрос по Derby / 4 сообщений из 4, страница 1 из 1
13.11.2006, 23:02:44
    #34125412
А.Гриневич
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос по Derby
Доброго времени!

Скажите плиз, как создать последовательность?

Спасибо.
...
Рейтинг: 0 / 0
14.11.2006, 11:48:36
    #34126399
pamir
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос по Derby
Кажется их там нет, но есть разные методы получить генератор оторванный от таблицы (если тебе нужен генератор, связанный с таблицей, то это делается легко и непринужденно (чуть ниже, где описывается создание таблицы)).
Прочитай тут
...
Рейтинг: 0 / 0
10.05.2007, 04:33:04
    #34515077
alx3
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос по Derby
Столкнулся с проблемой: есть база на Postgre, в ней есть 2 таблицы, которые инкрементятся от одной последовательности. Доступ в базу прямой без hibernate. Данные кладуться так, что id не указывается:
Код: plaintext
insert into tab1(val) values('...')
Перевожу это дело на Derby - полный затык, все перепробовал.
Может кто-нить успешно решал проблему?
...
Рейтинг: 0 / 0
10.05.2007, 16:54:53
    #34516993
alx3
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос по Derby
Всего сутки проб и ошибок - и проблема решена!))
Приведу решение (может кому будет интересно). Таблицы tab2 и tab3 инкрементим от одной последовательности.
Таблицы:
Код: plaintext
1.
2.
3.
4.
5.
create table tab2(
id integer primary key generated always as identity,
val varchar( 50 ));
create table tab3(
id integer primary key generated always as identity,
val varchar( 50 ));
Процедура, которая делает рестарт генератора таблицы с указанного значения:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
 public   static   void  restartGenerator(String tableName,  int  restartValue) {
	 try  {
		Connection conn = DriverManager
				.getConnection("jdbc:derby:c:/Derby/database/try");
		Statement stmt = conn.createStatement();
		StringBuilder query =  new  StringBuilder();
		query.append("alter table ");
		query.append(tableName);
		query.append(" alter column id restart with ");
		query.append(restartValue +  1 );
		System.out.println("query: " + query.toString());
		stmt.execute(query.toString());
		conn.close();
	}  catch  (SQLException e) {
		e.printStackTrace();
	}
}
Код: plaintext
1.
2.
3.
4.
create procedure restart_generator(
	in tablename varchar( 100 )
	, in restart_value integer
) parameter style java language java
external name 'org.degree.derby.DerbyProcedures.restartGenerator';
Триггеры на каждую таблицу, дергающие эту процедуру:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
create trigger tab2_id_trigger after insert on tab2
referencing  new  as new_row
 for  each row mode db2sql
call restart_generator('tab3',new_row.id);

create trigger tab3_id_trigger after insert on tab3
referencing  new  as new_row
 for  each row mode db2sql
call restart_generator('tab2',new_row.id);
Скорость пока не проверял, думаю потеря будет не особо большая.
...
Рейтинг: 0 / 0
Форумы / Java [игнор отключен] [закрыт для гостей] / Вопрос по Derby / 4 сообщений из 4, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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