ODBC 2.0.0 Comments

Ingela Anderton ingela@REDACTED
Mon Jul 26 12:58:25 CEST 2004


Always go to the man pages for the documentation the source code may
in some cases not be sufficient for the end user.

Rudolph van Graan wrote:
> Another thing I noticed is that the documentation for param_query seems  
> to be incomplete:
> %%---------------------------------------------------------------------- 
> ----
> %% param_query(ConnectionReference, SQLQuery, Params, <TimeOut>) ->
> %%                             ok | {error, Reason}
> %%
> %% Description: Executes a parameterized update/delete/insert-query.
> %%---------------------------------------------------------------------- 
> ----
> param_query(ConnectionReference, SQLQuery, Params) ->
> 
> What is the format of Params? I cannot seem to get it working:
> 
> 11> odbc:param_query(R,"select * from subscriberstat where msisdn =  
> ?",["27829057496"]).
> 
> I got a
> ** {stopped,{'EXIT',<0.24.0>,
>                      {{badmatch,["27829057496"]},
>                       [{odbc,param_query,4},
>                        {erl_eval,do_apply,5},
>                        {shell,eval_loop,2}]}}}
> 
> Obviously  I am not feeding it the params correctly.

>From the documentation of odbc 2.0 (Note only on zero)

param_query(ConnectionReference, SQLQuery, Params) ->
param_query(ConnectionReference, SQLQuery, Params, TimeOut) -> ResultTuple | {error, Reason}

Types:

SQLQuery = String() - a SQL query with parameter markers/place holders
	   in form of question marks.
Params = [{ODBCDataType, [Values]}]
         Values = term() - Must be consistent with the Erlang data
	 type that corresponds to the ODBC data type ODBCDataType

See also common data types. (Pasted below ...)

Executes a parameterized SQL query. For an example see the "Using the
Erlang API" in the Erlang ODBC User's Guide.

Note!

Use the function describe_table/[2,3] to find out which ODBC data type
  that is expected for each column of that table. If a column has a
  data type that is described with capital letters, alas it is not
  currently supported by the param_query function. Too know which
  Erlang data type corresponds to an ODBC data type see the Erlang to
  ODBC data type mapping in the User's Guide.  Use a parameterized
  query to insert many rows in one go.


... From common types:

 ODBCDataType = sql_integer | sql_smallint | sql_tinyint |
          {sql_decimal, Precison, Scale} | {sql_numeric, Precison, Scale} |
          {sql_char, Size} | {sql_varchar, Size} | {sql_float, Precision} |
          {sql_float, Precision} | sql_real | sql_double | sql_bit | atom()
    

 6 > odbc:param_query(Ref,"INSERT INTO EMPLOYEE (NR, FIRSTNAME, "
                          "LASTNAME, GENDER) VALUES(?, ?, ?, ?)",
                           [{sql_integer,[2,3,4,5,6,7,8]},
                            {{sql_varchar, 20},
                             ["John", "Monica", "Ross", "Rachel",
                             "Piper", "Prue", "Louise"]},
                           {{sql_varchar, 20},
                             ["Doe","Geller","Geller", "Green",
                              "Halliwell", "Halliwell", "Lane"]},
                           {{sql_char, 1}, ["M","F","M","F","F","F","F"]}]).
      {updated, 7}
   



> Any ideas (The documentation on erlang.org still shows version 1.0.8 of  
> ODBC)
That has to do with that there is no unix patch for the latest odbc as
all commercial customers that use odbc use windows.

-- 
/Ingela

Ericsson AB - OTP team









More information about the erlang-questions mailing list