HASH создает ассоциативный массив, например:

func_odbc.conf:
[Foo]
DSN=MySQL
readsql=SELECT * FROM Foo WHERE somefield = '${SQL_ESC(${ARG1})}'


extensions.conf:

Set(HASH(Foo)=${ODBC_FOO(${bar})})


Теперь можно ссылаться на $WARNING: No such module HASH! или $WARNING: No such module HASH! .
Вы даже можете добавить новые значения вот так
Set(HASH(foo,notinthetable)=baz).

В основном, это способ получения нескольких значений из базы данных без
использованием Array(). Можно перечислить каждое поле, но и при этом не создавая в пространстве имен множество ненужных переменных, которые могут привести к неожиданному поведению, например, когда появляется поле таблицы базы данных, имя которого совпадает
с существующей переменной.

Короче говоря, это способ быть в использовать "SELECT *" запрос, причем когда кто-то добавит столбцы к таблице и порядок полей изменится, то функция все равно будет работать.

Источник:http://lists.digium.com/pipermail/asterisk-users/2008-September/218390.html