Wednesday, February 21, 2007

Oracle, получение определенного количества строк со смещением.

Очень часто бывает необходимо получить из базы данных некоторое количество
строк с определенным смещением.
Например, это может понадобиться при организации постраничного просмотра некоторой информации.
Встроенных средств для этого в Oracle не предусмотрено, поэтому придется пойти немного "в обход".
Создадим таблицу test:

CREATE TABLE test (
id NUMBER PRIMARY KEY,
value VARCHAR(10) NOT NULL,
);


Добавим в нее для примера 7 записей
INSERT INTO test (id, value) VALUES (1, 'value1');
INSERT INTO test (id, value) VALUES (2, 'value2');
INSERT INTO test (id, value) VALUES (3, 'value3');
INSERT INTO test (id, value) VALUES (4, 'value4');
INSERT INTO test (id, value) VALUES (5, 'value5');
INSERT INTO test (id, value) VALUES (6, 'value6');
INSERT INTO test (id, value) VALUES (7, 'value7');


Следующий запрос позволит нам получить 3 строки начиная со второй:


SELECT id, value
FROM (SELECT ROW_NUMBER() OVER(ORDER BY id) AS rnum, id, value FROM test)
WHERE rnum > 2
AND rnum <= (2 + 3);

Результат:
ID VALUE
3 value3
4 value4
5 value4


Здесь 2 - номер строки, предшевствующей первой строке результата, 3 - количество строк, полученных в результате.
Для правильной работы данного примера, id должен быть уникален.

Monday, February 19, 2007

Создание схемы базы данных из Ant

При установке/тестировании приложения достаточно часто приходится создавать/пересоздавать схему базы данных. Используя Ant - это достаточно просто.
Пример:
Первое, что сделаем - это создадим файл db.properties и занесем в него необходимые нам настройки:


db.driver=oracle.jdbc.driver.OracleDriver
db.username=login
db.password=password
db.url=jdbc:oracle:thin:@127.0.0.1:1526:testdb
db.source.file=data.sql


Здесь db.driver - класс драйвера для подключения к базе данных, db.url - полный урл для доступа к базе данных, db.source.file - файл, в котором расположены SQL Query.

Теперь, собственно, сам файл build.xml (т.к. это фрагмент - файл будет предельно прост):

<?xml version="1.0"?>
<project name="build_db" default="create-db" >

<property file="db.properties" />

<path id="classpath">
<fileset dir="/lib" includes="**/*.jar" />
</path>

<target name="create-db" description="create database scheme">
<sql driver = "${db.driver}"
url = "${db.url}"
userid = "${db.username}"
password = "${db.password}"
src = "${db.source.file}"
onerror = "continue"
classpathref = "classpath"
/>
</target>
</project>


В этом файле сначала подключаем файл db.properties (теперь можно использовать параметры, определенные в нем также, как если бы они были определны непосредственно в самом build-файле)

Далее указываем свойства url, userid, password и src (думаю, эти свойства в представлении не нуждаются).

Свойство onerror - отвечает за то, будет ли продолжаться выполнение в случае возникновения ошибки при работе с базой данны. В данном случае - выполнение будет продолжено.

classpathref - это ссылка на элемент path, в котором перечислены пути поиска библиотек (например - путь до драйвера базы данных).

Вот, в общем-то и все :)