пятница, 30 марта 2012 г.

IDE for Oracle = vim + vorax

Install ruby:
sudo yum install ruby ruby-devel rubygems
sudo gem install antlr3 -r

Install vim with ruby support:
sudo yum install zlib-devel openssl-devel ncurses-devel
cd Downloads
git clone git://repo.or.cz/vim_mainline.git
cd vim_mainline
./configure --enable-rubyinterp --with-features=huge
make
sudo make install


wget http://www.vim.org/scripts/download_script.php?src_id=14847

воскресенье, 25 марта 2012 г.

Автодокументирование PL SQL кода

Отличная утилита для автодокументирования кода PL SQL - pldoc

воскресенье, 11 марта 2012 г.

install Tora 2.1.3 on Fedora 16

Скачиваем исходники и достаем из архива:
cd Downloads
wget http://downloads.sourceforge.net/project/tora/tora/2.1.3/tora-2.1.3.tar.bz2?r=http%3A%2F%2Fsourceforge.net%2Fprojects%2Ftora%2Ffiles%2Flatest%2Fdownload&ts=1331490264&use_mirror=ignum
tar -jxvf tora-2.1.3.tar.bz2

Устанавливаем зависимые пакеты:
su -c 'yum install qt-devel qscintilla-devel'

Понадобится переменная окружения LD_LIBRARY_PATH:
export LD_LIBRARY_PATH=$ORACLE_HOME/lib

cd tora-2.1.3/

Теперь неменого подправим файл src/Makefile.am: в блоке BUILT_SOURCES нужно добавить moc_toawr.cpp:
...
# files listed in BUILT_SOURCES are built before anything else.
BUILT_SOURCES = \
 moc_toawr.cpp \
 moc_toabout.cpp \
 moc_toalert.cpp \
...

Конфигурируем и собираем (предполагается, что на машине есть Oracle):
./configure --prefix=/usr --with-oracle=$ORACLE_HOME --with-oracle-libraries=$ORACLE_HOME/lib
make
su -c 'make install'

пятница, 9 марта 2012 г.

Extract Oracle DDL to File

Простой скрипт для выгрузки DDL-кода Oracle-объекта в файл.

GenDDL.sql:
SET TERMOUT OFF
SET VERIFY OFF
SET ECHO OFF
SET LONG 9000000
SET LONGC 900
SET LINES 400
SET TRIMSPOOL ON
SET PAGES 0
SET FEEDBACK OFF
SET HEAD OFF
SET SQLBLANKLINES OFF
SET SERVEROUTPUT ON

BEGIN
   DBMS_METADATA.set_transform_param (DBMS_METADATA.session_transform,
                                      'PRETTY',
                                      TRUE);
   DBMS_METADATA.set_transform_param (DBMS_METADATA.session_transform,
                                      'SQLTERMINATOR',
                                      TRUE);
   DBMS_METADATA.set_transform_param (DBMS_METADATA.session_transform,
                                      'SEGMENT_ATTRIBUTES',
                                      FALSE);
   DBMS_METADATA.set_transform_param (DBMS_METADATA.session_transform,
                                      'STORAGE',
                                      FALSE);
   DBMS_METADATA.set_transform_param (DBMS_METADATA.session_transform,
                                      'TABLESPACE',
                                      FALSE);
   DBMS_METADATA.set_transform_param (DBMS_METADATA.session_transform,
                                      'REF_CONSTRAINTS',
                                      TRUE);
   DBMS_METADATA.set_transform_param (DBMS_METADATA.session_transform,
                                      'SPECIFICATION',
                                      TRUE);
   DBMS_METADATA.set_transform_param (DBMS_METADATA.session_transform,
                                      'BODY',
                                      TRUE);
   DBMS_METADATA.set_transform_param (DBMS_METADATA.session_transform,
                                      'CONSTRAINTS',
                                      TRUE);
   DBMS_METADATA.set_transform_param (DBMS_METADATA.session_transform,
                                      'STORAGE',
                                      TRUE);
   DBMS_METADATA.set_transform_param (DBMS_METADATA.session_transform,
                                      'CONSTRAINTS_AS_ALTER',
                                      TRUE);
END;
/

SPOOL '&&3'

BEGIN
   FOR i IN (SELECT owner,
                    object_type,
                    object_name,
                    created d
               FROM all_objects
              WHERE owner = '&&1' AND object_name = '&&2')
   LOOP
      DBMS_OUTPUT.Put_Line (
         DBMS_METADATA.get_ddl (REPLACE (i.object_type, ' ', '_'),
                                i.object_name,
                                i.owner));
   END LOOP;
END;
/

SPOOL OFF

EXIT
Используется 3 входных параметра:
1) Пользователь (схема);
2) Объект;
3) Файл для выгрузки.

Пример запуска:
rlwrap sqlplus -silent=true objectman@XE/objectman @/home/maksim/projects/AntOraDDL/GenDDL.sql OBJECTMAN MYBOOKS /home/maksim/projects/AntOraDDL/mybooks.sql

воскресенье, 4 марта 2012 г.

Автодополнение в sqlplus

Наконец нашел то, чего так не хватало в sqlplus'е - простой GPL'ный фрон енд - gqlplus:
- Навигация по истории команд;
- Редактор командной строки (правда все это есть в rlwrap);
- Автододополнении для имен таблиц и колонок (вот это действительно здорово).
Плюс ко всему этому имеются собранные deb и rpm пакеты.