Written by blitzrage (untested): func_odbc.conf: [COUNT] prefix=ROW dsn=my_pgsql_connector read=SELECT COUNT(*) FROM my_table WHERE foo = '${ARG1}' [GET] prefix=ROW dsn=my_pgsql_connector read=SELECT foo, bar FROM my_table WHERE foo = '${ARG1}' LIMIT 1 OFFSET ${ARG2} extensions.conf: [test] exten => s,1,Set(X=0) exten => s,n,Set(MAX=${ROW_COUNT(bar)}) ; will return number of rows exten => s,n,GosubIf($[${ISNULL(${MAX})} | 0${MAX} < 1]?error_handler,s,1) ; Get the data exten => s,n,While($[${X} <= ${MAX}]) exten => s,n,Set(ARRAY(FOO_${X},BAR_${X})=${ROW_GET(bar,${X})}) exten => s,n,Set(X=$[${X} + 1]) exten => s,n,EndWhile() ; View the data exten => s,n,Set(Y=0) exten => s,n,While($[${Y} <= ${MAX}]) exten => s,n,Verbose(1|FOO_${Y} VALUE: ${FOO_${Y}}) exten => s,n,Verbose(1|BAR_${Y} VALUE: ${BAR_${Y}}) exten => s,n,Set(Y=$[${Y} + 1]) exten => s,n,EndWhile() exten => s,n,Verbose(1|All done!) exten => s,n,Hangup()