Oracle Call Interface
Nov. 13th, 2009 05:47 pmРассуждая в начале года про vim и dbext, я пришёл к выводу, что вызов sql*plus для выполнения запросов не годится, так как он некорректно обрабатывает «широкие» таблицы. И что надо писать свою программку.™
На чём её писать? Нужно что-то такое, чтобы работало на тех же платформах, где и vim. Причём не хотелось бы, чтобы потреблялось много ресурсов — ну неохота мне ждать, пока запустится какая-нибудь виртуальная машина только ради того, чтобы выбрать sysdate из dual. Так что пусть будет Си + OCI.
OCI оказался мудрёным, выборка sysdate вылилась чуть не в две сотни строчек, которые для истории лежат ( под катом )
Программка отлично скомпилировалась gcc под cygwin следующим образом:
gcc -o test.exe -I%ORACLE_HOME%\oci\include test.c %ORACLE_HOME%\bin\oci.dll
Но как же я привык к исключениям! Страдаю без них. И как же я отвык от вот этого:
6585 [main] test 196 _cygtls::handle_exceptions: Exception: STATUS_ACCESS_VIOLATION 10471 [main] test 196 open_stackdumpfile: Dumping stack trace to test.exe.stackdump
PL/SQL forever! (Кстати, DB2 с недавних пор поддерживает PL/SQL, так что...)