2015-10-05 26 views
6

Non riesco a trovare alcuna documentazione o esempi per questo. Finora, posso connettermi con successo, però, non conosco la sintassi per selezionare e restituire i dati.Come selezionare i dati tramite ODBC da Elixir?

:odbc.start() 
{:ok, conn} = :odbc.connect('DSN=mydsn;UID=myuid;PWD=mypwd', []) 
:odbc.execute_stmt(conn, 'select count(*) from mytable') 
:odbc.stop() 

** (UndefinedFunctionError) funzione non definita:: odbc.execute_stmt/2 (ODBC): odbc.execute_stmt (#PID < 0.85.0>, 'select count (*) from mytable')


aggiornamento 10/6/2015

ho trovato come fare questo. Credo di non aver trovato alcuna documentazione su questo per Elixir, perché Elixir semplicemente fa un pass-through alla libreria di Erlang.

In ogni caso è sql_query, o select_count:

{:selected, colNames, rows} = :odbc.sql_query(conn, 'select count(*) from mytable') 

{: selezionato, [ 'count'], [{ '182'}]}

{:ok, count} = :odbc.select_count(conn, 'select * from mytable') 

{: ok, 182}


aggiornamento 10/7/2015

Ecco il mio codice finale, che credo sia più idiomatica:

:odbc.start() 
case :odbc.connect('DSN=mydsn;UID=#{System.get_env("MY_UID")};PWD=#{System.get_env("MY_PASSWORD")}', []) do 
    {:ok, conn} -> 
    case :odbc.sql_query(conn, 'select count(*) from mytable') do 
     {:selected, _colNames, [{count}]} -> IO.puts "count = #{count}" 
     {:error, err} -> {:error, err} 
    end 
    {:error, err} -> {:error, err} 
end 
:odbc.stop() 

risposta

2

ci sono un paio di cose qui:

1.) Penso che tu voglia :odbc.sql_query/2. L'anno scorso ho sviluppato un'applicazione abbastanza sostanziale utilizzando ODBC per comunicare con SQLServer e ho usato sql_query praticamente ovunque. Condividerei la fonte ma non posso.

2.) Non riesco a trovare alcuna documentazione su execute_stmt nel official Erlang ODBC docs (v2.11.1), quindi penso che possa essere deprecato. Ho trovato an example che utilizza execute_stmt ma l'arity era quattro non due. E sembra che la versione di ODBC coinvolta (a giudicare dal link stesso) sia piuttosto vecchia - pre v1.0.

3.) In elisir tendiamo a rifuggire da ricostruire cose che sono già state costruite in Erlang a meno che non ci sia un bisogno impellente di farlo. Poiché ODBC è già presente in Erlang e funziona abbastanza bene, direi che la guida generale è chiamata Erlang lib from Elixir. Elixir è stato progettato per semplificare il richiamo del codice Erlang.