1. Install sublime text 3:
sudo add-apt-repository ppa:webupd8team/sublime-text-3
sudo apt-get update
sudo apt-get install sublime-text-installer
2. Apply updates. From the official website, the latest version as of writing is build 3143 (13 September 2017):
2.1 Download build:
# for 64-bit OS
curl https://download.sublimetext.com/sublime_text_3_build_3143_x64.tar.bz2 | tar vxj
# for 32-bit OS
curl https://download.sublimetext.com/sublime_text_3_build_3143_x32.tar.bz2 | tar vxj
2.2 Overwrite your old installation:
sudo cp -rf sublime_text_3/. /opt/sublime_text
2.3 Remove the download
rm -rf sublime_text_3*
Notation: If you need to delete sublime just run:
sudo apt-get remove sublime-text-installer
Neo4j. Installation and remote access with shell client
Ниже приведено небольшое руководство по разворачиванию Neo4j версии 3.2.1 в среде Ubuntu 14.04 LTS в качестве сервера, с которым можно поиграться :)
1. Перед установкой Neo4j убедитесь в том, что у вас установлена java8. Если требуется установка, тогда можно воспользоваться с помощью Webup8 Oracle Java8 Installer. Выполните следующие команды:
sudo add-apt-repository ppa:webupd8team/java
sudo apt-get update
sudo apt-get install oracle-java8-installer
Если у вас возникают проблемы из-за наличия прокси в вашей сети, тогда необходимо установить следующие переменные среды:
export http_proxy=http://username:password@host:port/
export https_proxy=https://username:password@host:port/
И снова выполнить приведенные выше команды:
sudo -E add-apt-repository ppa:webupd8team/java
sudo apt-get update
sudo apt-get install oracle-java8-installer
2. Установка Neo4j
cd ~
wget -O - http://debian.neo4j.org/neotechnology.gpg.key >> key.pgp
sudo apt-key add key.pgp
echo 'deb http://debian.neo4j.org/repo stable/' | sudo tee -a /etc/apt/sources.list.d/neo4j.list > /dev/null
sudo apt-get update
sudo apt-get install neo4j
sudo service neo4jsudo (stop|start|restart|status)
После этого вы можете подключиться к базе данных через http протокол по адресу http://localhost:7474/browser/. Для первоначально входа надо использовать пользователя - neo4j с паролем - neo4j. После успешного подключения вам будет предложено изменить пароль.
3. Для возможности подключаться к Neo4j в качестве сервера с других хостов, необходимо в файле настройки neo4f.conf раскомментировать следующие строчки:
# With default configuration Neo4j only accepts local connections.
# To accept non-local connections, uncomment this line:
dbms.connectors.default_listen_address=0.0.0.0
# Enable a remote shell server which Neo4j Shell clients can log in to.
dbms.shell.enabled=true
# The network interface IP the shell will listen on (use 0.0.0.0 for all interfaces).
dbms.shell.host=0.0.0.0
# The port the shell will listen on, default is 1337.
dbms.shell.port=1337
Далее перезагрузите Neo4j. Теперь попробуем подключиться к серверу в среде Windows в качестве клиента (не забываем о наличии java8). Для этого воспользуемся инструментами, которые входят в поставку Neo4j. Cкачайте исходник в виде zip-архив. После распаковки в разделе /bin можно будет найти необходимую оболочку в виде батника. Далее откройте командное окно и попробуйте подключиться к Neo4j серверу:
cd .../Neo4j/bin/
cypher-shell -a bolt://<ip-address-of-neo4j-server>:7678 -u neo4j -p <password>
Всем успехов :)
1. Перед установкой Neo4j убедитесь в том, что у вас установлена java8. Если требуется установка, тогда можно воспользоваться с помощью Webup8 Oracle Java8 Installer. Выполните следующие команды:
sudo add-apt-repository ppa:webupd8team/java
sudo apt-get update
sudo apt-get install oracle-java8-installer
Если у вас возникают проблемы из-за наличия прокси в вашей сети, тогда необходимо установить следующие переменные среды:
export http_proxy=http://username:password@host:port/
export https_proxy=https://username:password@host:port/
И снова выполнить приведенные выше команды:
sudo -E add-apt-repository ppa:webupd8team/java
sudo apt-get update
sudo apt-get install oracle-java8-installer
2. Установка Neo4j
cd ~
wget -O - http://debian.neo4j.org/neotechnology.gpg.key >> key.pgp
sudo apt-key add key.pgp
echo 'deb http://debian.neo4j.org/repo stable/' | sudo tee -a /etc/apt/sources.list.d/neo4j.list > /dev/null
sudo apt-get update
sudo apt-get install neo4j
sudo service neo4jsudo (stop|start|restart|status)
После этого вы можете подключиться к базе данных через http протокол по адресу http://localhost:7474/browser/. Для первоначально входа надо использовать пользователя - neo4j с паролем - neo4j. После успешного подключения вам будет предложено изменить пароль.
3. Для возможности подключаться к Neo4j в качестве сервера с других хостов, необходимо в файле настройки neo4f.conf раскомментировать следующие строчки:
# With default configuration Neo4j only accepts local connections.
# To accept non-local connections, uncomment this line:
dbms.connectors.default_listen_address=0.0.0.0
# Enable a remote shell server which Neo4j Shell clients can log in to.
dbms.shell.enabled=true
# The network interface IP the shell will listen on (use 0.0.0.0 for all interfaces).
dbms.shell.host=0.0.0.0
# The port the shell will listen on, default is 1337.
dbms.shell.port=1337
Далее перезагрузите Neo4j. Теперь попробуем подключиться к серверу в среде Windows в качестве клиента (не забываем о наличии java8). Для этого воспользуемся инструментами, которые входят в поставку Neo4j. Cкачайте исходник в виде zip-архив. После распаковки в разделе /bin можно будет найти необходимую оболочку в виде батника. Далее откройте командное окно и попробуйте подключиться к Neo4j серверу:
cd .../Neo4j/bin/
cypher-shell -a bolt://<ip-address-of-neo4j-server>:7678 -u neo4j -p <password>
Всем успехов :)
Emacs. Light PHP IDE
Как известно, про возможности emacs в сети интернета информации достаточно, но вот найти какие-либо подробные инструкции по настройке данных возможностей сложновато.
В одной из своих статей в своем блоге Ben Simon поделился рецептом настройки Emacs под PHP - Emacs + PHP - A Modern and (Far More Complete) Recipe. Я решил проверить этот рецепт на деле. Как оказалось, рецепт действенный.
1. Установка MELPA
MELPA - это репозиторий различных по функциональности пакетов, которые Вы можете устанавливать в свой редактор. Для этого перейдите в настройку пакетов
M-x customize-group RET package
В окне настроек перейдите в раздел Package Archives и укажите репозиторий
с именем "melpa" и URL адресом "http://melpa.org/packages"
Нажатием State сохраняем для последующих сессий
2. Установка режима PHP Mode
Для этого перейдите в список доступных пакетов
M-x list-packages
Перед выдачей полного списка Emacs обратиться в прописанные репозитории, в частности - MELPA, и подгрузит список пакетов
Здесь стоит отметить, что если у Вас стоит прокси, то пакеты могут не подгрузиться, для этого
необходимо в config-файле (~/.emacs) прописать следующую команду
(setq url-proxy-services
'(("no_proxy" . "^\\(localhost\\|10.*\\)")
("http" . "proxy_address:proxy_port")
("https" . "proxy_address:proxy_port")))
Далее среди списка найдите пакет php-mode (Для быстроты воспользуйтесь командой C-s)
Далее нажмите RET находясь на строке и выполните установку данного пакета.
Можно установить пакет и иначе, для это достаточно выполнить
M-x package-install RET php-mode
3. Установка Web-Mode.el
Во время веб разработки порой приходиться работать с html, css и javascript на уровне одного исходника, то не совсем правильно использовать режим php-mode. Для этого случая предлагается использовать режим web-mode
M-x package-install RET web-mode
4. Добавление автоматического переключения между режимами php-mode и web-mode
Так как каждый из этих режимов имеет свои нюансы, то удобнее назначить shirt-cat
для переключения этих режимов. Хотя можно оставить все как есть и в мини-буфере задавать
текущий режим нажатием M-x php-mode или M-x web-mode.
Для реализации shirt-cat можно воспользоваться следующим кодом
(defun toggle-php-flavor-mode ()
(interactive)
"Toggle mode between PHP & Web-Mode Helper modes"
(cond ((string= mode-name "PHP")
(web-mode))
((string= mode-name "Web")
(php-mode))))
(global-set-key [f5] 'toggle-php-flavor-mode)
Теперь при нажатии F5 мы будем автоматически переключать данные режимы
5. Настройка авто-дополнения
Для этого воспользуемся пакетом ac-php, который поддерживает дополнение функций и классов. Данный пакет устанавливается из репозитория MELPA, но перед этим необходимо проверить доступность php через командную строку, например так
php --version
Помимо этого необходимо установить cscope. Для unix-систем все очень просто (см. README ac-php), для windows его необходимо отдельно скачать по ссылке, установить и проверить доступность утилиты в командной строке. Иначе пропишите в переменных средах (Компьютер -> Свойства -> Изменить параметры -> Дополнительно -> Переменные среды)
После этого установите пакет ac-php по аналогии с предыдущими пакетами.
Далее, как сказано в инструкции, добавьте код (в Ваш config-файл)
(add-hook 'php-mode-hook
'(lambda ()
(require 'company-php)
(company-mode t)
(ac-php-core-eldoc-setup) ;; enable eldoc
(make-local-variable 'company-backends)
(add-to-list 'company-backends 'company-ac-php-backend)))
Далее создайте файл .ac-php-conf.json в корне Вашего проекта и наберите команду
M-x ac-php-remake-tags-all
Все готово.
В одной из своих статей в своем блоге Ben Simon поделился рецептом настройки Emacs под PHP - Emacs + PHP - A Modern and (Far More Complete) Recipe. Я решил проверить этот рецепт на деле. Как оказалось, рецепт действенный.
1. Установка MELPA
MELPA - это репозиторий различных по функциональности пакетов, которые Вы можете устанавливать в свой редактор. Для этого перейдите в настройку пакетов
M-x customize-group RET package
В окне настроек перейдите в раздел Package Archives и укажите репозиторий
с именем "melpa" и URL адресом "http://melpa.org/packages"
2. Установка режима PHP Mode
Для этого перейдите в список доступных пакетов
M-x list-packages
Перед выдачей полного списка Emacs обратиться в прописанные репозитории, в частности - MELPA, и подгрузит список пакетов
Здесь стоит отметить, что если у Вас стоит прокси, то пакеты могут не подгрузиться, для этого
необходимо в config-файле (~/.emacs) прописать следующую команду
(setq url-proxy-services
'(("no_proxy" . "^\\(localhost\\|10.*\\)")
("http" . "proxy_address:proxy_port")
("https" . "proxy_address:proxy_port")))
Далее среди списка найдите пакет php-mode (Для быстроты воспользуйтесь командой C-s)
Далее нажмите RET находясь на строке и выполните установку данного пакета.
Можно установить пакет и иначе, для это достаточно выполнить
M-x package-install RET php-mode
3. Установка Web-Mode.el
Во время веб разработки порой приходиться работать с html, css и javascript на уровне одного исходника, то не совсем правильно использовать режим php-mode. Для этого случая предлагается использовать режим web-mode
M-x package-install RET web-mode
4. Добавление автоматического переключения между режимами php-mode и web-mode
Так как каждый из этих режимов имеет свои нюансы, то удобнее назначить shirt-cat
для переключения этих режимов. Хотя можно оставить все как есть и в мини-буфере задавать
текущий режим нажатием M-x php-mode или M-x web-mode.
Для реализации shirt-cat можно воспользоваться следующим кодом
(defun toggle-php-flavor-mode ()
(interactive)
"Toggle mode between PHP & Web-Mode Helper modes"
(cond ((string= mode-name "PHP")
(web-mode))
((string= mode-name "Web")
(php-mode))))
(global-set-key [f5] 'toggle-php-flavor-mode)
Теперь при нажатии F5 мы будем автоматически переключать данные режимы
5. Настройка авто-дополнения
Для этого воспользуемся пакетом ac-php, который поддерживает дополнение функций и классов. Данный пакет устанавливается из репозитория MELPA, но перед этим необходимо проверить доступность php через командную строку, например так
php --version
Помимо этого необходимо установить cscope. Для unix-систем все очень просто (см. README ac-php), для windows его необходимо отдельно скачать по ссылке, установить и проверить доступность утилиты в командной строке. Иначе пропишите в переменных средах (Компьютер -> Свойства -> Изменить параметры -> Дополнительно -> Переменные среды)
После этого установите пакет ac-php по аналогии с предыдущими пакетами.
Далее, как сказано в инструкции, добавьте код (в Ваш config-файл)
(add-hook 'php-mode-hook
'(lambda ()
(require 'company-php)
(company-mode t)
(ac-php-core-eldoc-setup) ;; enable eldoc
(make-local-variable 'company-backends)
(add-to-list 'company-backends 'company-ac-php-backend)))
Далее создайте файл .ac-php-conf.json в корне Вашего проекта и наберите команду
M-x ac-php-remake-tags-all
Все готово.
Emacs. Proxy
In your emacs config file (~/.emacs) write next command:
(setq url-proxy-services
'(("no_proxy" . "^\\(localhost\\|10.*\\)")
("http" . "proxy_address:proxy_port")
("https" . "proxy_address:proxy_port")))
(setq url-proxy-services
'(("no_proxy" . "^\\(localhost\\|10.*\\)")
("http" . "proxy_address:proxy_port")
("https" . "proxy_address:proxy_port")))
Emacs Hotkeys
FILE | ||
---|---|---|
Open | Ctrl-X, Ctrl-F | |
Save | Ctrl-X, Ctrl-S | |
Save As | Ctrl-X, Ctrl-W | |
Save All | Ctrl-X, S | |
Revert to File | Ctrl-X, Ctrl-V | |
Revert Buffer | Meta-X, revert-buffer | |
Exit | Ctrl-X, Ctrl-C | |
EDIT | ||
Undo | Ctrl-_ | |
Paste | Ctrl-Y | |
Begin Selection | Ctrl-SPC | |
Delete | DEL | |
Fwd Delete | Ctrl-D | |
Delete Word | Meta-DEL | |
Fwd Delete Word | Meta-D | |
Delete Line | Ctrl-K | |
Delete Selection | Ctrl-W | |
CURSOR MOVEMENT | ||
FORWARD | BACKWARD | |
Word | Meta-F | Meta-B |
Line | Ctrl-A | Ctrl-E |
Paragraph | Meta- | |
Page | Ctrl-V | Meta-V |
Document | Meta-< | Meta-> |
Function | Meta-Ctrl-A | Meta-Control-E |
SEARCH | ||
Incremental Search | Ctrl-S | |
Incremental Search Reverse | Ctrl-R | |
Regexp Inc Search | Meta-Ctrl-S | |
Regexp Inc Search Reverse | Meta-Ctrl-R | |
Interactive Search and Replace | Meta-% | |
Goto Line Number | Meta-X goto-line | |
WINDOW | ||
Close | Ctrl-X, K | |
Next Window | Ctrl-X, B | |
Choose Window | Ctrl-X, Ctrl-B | |
Maximize | Ctrl-X, 1 | |
Split Horizontal | Ctrl-X, 2 | |
Split Vertical | Ctrl-X, 3 | |
Switch Keyboard Focus | Ctrl-X, O | |
Activate Menu Bar | Meta-` | |
REGISTERS | ||
Copy Selection to Names Register | Ctrl-X R S | |
Paste Names Register | Ctrl-X R I | |
Set Bookmark | Ctrl-X R SPC | |
Jump to Bookmark | Ctrl-X R J | |
FORMATTING | ||
Re-flow Paragraph | Meta-Q | |
Indent Selection | Meta-Control-\ | |
Uppercase Word | Meta-U | |
Lowercase Word | Meta-L | |
Capitalize Word | Meta-C | |
Uppercase Selection | Ctrl-X, Ctrl-U | |
Lowercase Selection | Ctrl-X, Ctrl-L | |
MACROS | ||
Start Recording | Ctrl-X, ( | |
Stop Recording | Ctrl-X, ) | |
Play Macro | Ctrl-X, E |
PLSQL. Small utility package for grabbing statistical data
Small utility package for grabbing statistical data for getting elapsed time and captured memory (session pga memory):
Oracle. Hash keys
При необходимости хеширования на стороне базы данных вы можете воспользоваться различными способами:
- ORA_HASH, доступно с версии 10.2;
- DBMS_UTILITY.GET_HASH_VALUE, доступно с версии 9.0.1. По функциональности данный метод идентичен предыдущей функции ORA_HASH;
- пакет DBMS_OBFUSCATION_TOOLKIT. С версии 11.2 объявлен как DEPRECATED.
- DBMS_CRYPTO.HASH, доступно с 10 версии;
- STANDARD_HASH, доступно с версии 12.1
Первые два способа, работают одинаково:
select
1 + ora_hash('some_test_text') as ora_hash_value,
dbms_utility.get_hash_value('some_test_text', 1, power(2, 31) - 1) as get_hash_value
from dual
Но их использование для целей хеширования некорректно, так как хеш-функция возвращает 32-битное значение и как итог у Вас будут возникать коллизии, например - вероятность встретить два разных значения с одинаковыми хеш ключами среди набора 9300 строк составляет около 1% (источник). Дальше больше. Вывод очевиден. Данные функции могут использоваться и используются за счет этого при разбиении данных по BUCKET-ам (пример).
Остальные способы относятся к криптографическим.
Пакет DBMS_OBFUSCATION_TOOLKIT предоставляет возможность MD5 хеширования:
select
lower(dbms_obfuscation_toolkit.md5(input => utl_raw.cast_to_raw('qwerty'))) md5hash
from dual
Так как данный пакет объявлен устаревшим, то более правильно использовать пакет DBMS_CRYPTO, а именно его функцию DBMS_CRYPTO.HASH.
Данная функция принимает первым параметром значения следующих типов данных - RAW, BLOB и CLOB, но не VARCHAR2. Вторым параметром передается предустановленная константа, которая определяет алгоритм хеширования. До версии v.12c доступны только следующие константы - HASH_MD4, HASH_MD5 and HASH_SH1. Для новой версии же доступны все остальные константы. Ниже полный список данных констант:
Данные константы недоступны при использовании в SQL, но вместо указания константы можно указать их числовое значение, например - получим хеш ключ для строки 'qwerty':
select
lower(dbms_crypto.hash(utl_raw.cast_to_raw('qwerty'), 2)) md5hash
from dual
Как было отмечено с версии Oracle 11.2 была введена новая функция STANDARD_HASH. Данная функция поддерживает те же алгоритмы хеширования, что и DBMS_CRYPTO.HASH, но отличается тем, что проще используется в SQL и имеет большую скорость работы.
Первым параметром передается входное значение любого типа данных, за исключением LONG и LOB. Вторым параметром передается тип алгоритма хеширования в строковом виде. По-умолчанию используется значение 'SHA1', к остальным возможным значениям относятся следующие - 'MD5', 'SHA256', 'SHA384' и 'SHA512'.
with
test_data(n, hash) as (
select rownum, standard_hash(rownum, 'MD5')
from dual connect by rownum <= 1000000
)
select hash, count(*)
from test_data
group by hash
having count(*) > 1
Данный запрос генерирует 1 миллион хеш ключей без коллизий.
В заключение рассмотрим таблицу с оценкой времени выполнения ряда приведенных методов хеширования (источник).
Из таблицы видно, что самой быстрой является функция STANDARD_HASH. Но если у вас версия Oracle не столь нова, тогда в виде альтернативы можно использовать пакет DBMS_CRYPTO с алгоритмом хеширования SHA-1 (160 битов достаточно, чтобы избежать коллизий).
Напоследок приведу пример функции для получения хеш ключей по заданному алгоритму в зависимости от текущей версии Oracle:
create or replace function hash_key(p_string in varchar2, p_algorithm in varchar2) return varchar2 deterministic
is
l_algorithm varchar2(32767) := upper(trim(p_algorithm));
l_err_num number := -20000;
l_err_msg varchar2(50) := 'Given algorithm is not supported';
begin
-- for 12.1 and higher versions
$if (dbms_db_version.version = 12 and
dbms_db_version.release >= 1) or
dbms_db_version.version > 12 $then
if l_algorithm in ('MD5', 'SHA1', 'SHA256', 'SHA384', 'SHA512') then
return standard_hash(p_string, l_algorithm);
else
raise_application_error (l_err_num, l_err_msg);
end if;
-- for versions between 10.x and 12.0
$elsif dbms_db_version.version >= 10 $then
if l_algorithm = 'SHA1' then
return dbms_crypto.hash(utl_raw.cast_to_raw(p_string), dbms_crypto.hash_sh1);
elsif l_algorithm = 'MD5' then
return dbms_crypto.hash(utl_raw.cast_to_raw(p_string), dbms_crypto.hash_md5);
elsif l_algorithm = 'MD4' then
return dbms_crypto.hash(utl_raw.cast_to_raw(p_string), dbms_crypto.hash_md4);
else
raise_application_error (l_err_num, l_err_msg);
end if;
-- for versions less than 10.x
$else
if l_algorithm = 'MD5' then
return dbms_obfuscation_toolkit.md5(input => utl_raw.cast_to_raw(p_string));
else
raise_application_error (l_err_num, l_err_msg);
end if;
$end
end;
- ORA_HASH, доступно с версии 10.2;
- DBMS_UTILITY.GET_HASH_VALUE, доступно с версии 9.0.1. По функциональности данный метод идентичен предыдущей функции ORA_HASH;
- пакет DBMS_OBFUSCATION_TOOLKIT. С версии 11.2 объявлен как DEPRECATED.
- DBMS_CRYPTO.HASH, доступно с 10 версии;
- STANDARD_HASH, доступно с версии 12.1
Первые два способа, работают одинаково:
select
1 + ora_hash('some_test_text') as ora_hash_value,
dbms_utility.get_hash_value('some_test_text', 1, power(2, 31) - 1) as get_hash_value
from dual
Но их использование для целей хеширования некорректно, так как хеш-функция возвращает 32-битное значение и как итог у Вас будут возникать коллизии, например - вероятность встретить два разных значения с одинаковыми хеш ключами среди набора 9300 строк составляет около 1% (источник). Дальше больше. Вывод очевиден. Данные функции могут использоваться и используются за счет этого при разбиении данных по BUCKET-ам (пример).
Остальные способы относятся к криптографическим.
Пакет DBMS_OBFUSCATION_TOOLKIT предоставляет возможность MD5 хеширования:
select
lower(dbms_obfuscation_toolkit.md5(input => utl_raw.cast_to_raw('qwerty'))) md5hash
from dual
Так как данный пакет объявлен устаревшим, то более правильно использовать пакет DBMS_CRYPTO, а именно его функцию DBMS_CRYPTO.HASH.
Данная функция принимает первым параметром значения следующих типов данных - RAW, BLOB и CLOB, но не VARCHAR2. Вторым параметром передается предустановленная константа, которая определяет алгоритм хеширования. До версии v.12c доступны только следующие константы - HASH_MD4, HASH_MD5 and HASH_SH1. Для новой версии же доступны все остальные константы. Ниже полный список данных констант:
- HASH_MD4 CONSTANT PLS_INTEGER := 1;
- HASH_MD5 CONSTANT PLS_INTEGER := 2;
- HASH_SH1 CONSTANT PLS_INTEGER := 3;
- HASH_SH256 CONSTANT PLS_INTEGER := 4;
- HASH_SH384 CONSTANT PLS_INTEGER := 5;
- HASH_SH512 CONSTANT PLS_INTEGER := 6;
Данные константы недоступны при использовании в SQL, но вместо указания константы можно указать их числовое значение, например - получим хеш ключ для строки 'qwerty':
select
lower(dbms_crypto.hash(utl_raw.cast_to_raw('qwerty'), 2)) md5hash
from dual
Как было отмечено с версии Oracle 11.2 была введена новая функция STANDARD_HASH. Данная функция поддерживает те же алгоритмы хеширования, что и DBMS_CRYPTO.HASH, но отличается тем, что проще используется в SQL и имеет большую скорость работы.
Первым параметром передается входное значение любого типа данных, за исключением LONG и LOB. Вторым параметром передается тип алгоритма хеширования в строковом виде. По-умолчанию используется значение 'SHA1', к остальным возможным значениям относятся следующие - 'MD5', 'SHA256', 'SHA384' и 'SHA512'.
with
test_data(n, hash) as (
select rownum, standard_hash(rownum, 'MD5')
from dual connect by rownum <= 1000000
)
select hash, count(*)
from test_data
group by hash
having count(*) > 1
Данный запрос генерирует 1 миллион хеш ключей без коллизий.
В заключение рассмотрим таблицу с оценкой времени выполнения ряда приведенных методов хеширования (источник).
Из таблицы видно, что самой быстрой является функция STANDARD_HASH. Но если у вас версия Oracle не столь нова, тогда в виде альтернативы можно использовать пакет DBMS_CRYPTO с алгоритмом хеширования SHA-1 (160 битов достаточно, чтобы избежать коллизий).
Напоследок приведу пример функции для получения хеш ключей по заданному алгоритму в зависимости от текущей версии Oracle:
create or replace function hash_key(p_string in varchar2, p_algorithm in varchar2) return varchar2 deterministic
is
l_algorithm varchar2(32767) := upper(trim(p_algorithm));
l_err_num number := -20000;
l_err_msg varchar2(50) := 'Given algorithm is not supported';
begin
-- for 12.1 and higher versions
$if (dbms_db_version.version = 12 and
dbms_db_version.release >= 1) or
dbms_db_version.version > 12 $then
if l_algorithm in ('MD5', 'SHA1', 'SHA256', 'SHA384', 'SHA512') then
return standard_hash(p_string, l_algorithm);
else
raise_application_error (l_err_num, l_err_msg);
end if;
-- for versions between 10.x and 12.0
$elsif dbms_db_version.version >= 10 $then
if l_algorithm = 'SHA1' then
return dbms_crypto.hash(utl_raw.cast_to_raw(p_string), dbms_crypto.hash_sh1);
elsif l_algorithm = 'MD5' then
return dbms_crypto.hash(utl_raw.cast_to_raw(p_string), dbms_crypto.hash_md5);
elsif l_algorithm = 'MD4' then
return dbms_crypto.hash(utl_raw.cast_to_raw(p_string), dbms_crypto.hash_md4);
else
raise_application_error (l_err_num, l_err_msg);
end if;
-- for versions less than 10.x
$else
if l_algorithm = 'MD5' then
return dbms_obfuscation_toolkit.md5(input => utl_raw.cast_to_raw(p_string));
else
raise_application_error (l_err_num, l_err_msg);
end if;
$end
end;
Subscribe to:
Posts
(
Atom
)