Ganesh
Ganesh

Reputation: 5

Getting SQLCODE=-104 on binding a parameter for DB2 query in Python

Assuming the data.xlsx looks like this:

Column_Name | Table_Name

CUST_ID_1 | Table_1

CUST_ID_2 | Table_2

Here are the SQLs that I'm trying to generate by using the bind_param for db2 in Python:

SELECT CUST_ID_1 FROM TABLE_1 WHERE CUST_ID_1 = 12345

SELECT CUST_ID_2 FROM TABLE_2 WHERE CUST_ID_2 = 12345

And this is how Im trying to generate this query:

import ibm_db
import pandas as pd
from pandas import ExcelWriter
from pandas import ExcelFile

validate_sql = "SELECT ? FROM ? WHERE ?=12345"
validate_stmt = ibm_db.prepare(conn, validate_sql)

df = pd.read_excel("data.xlsx", sheet_name='Sheet1')

for i in df.index:
    ibm_db.bind_param(validate_stmt, 1, df['Column_Name'][i])
    ibm_db.bind_param(validate_stmt, 2, df['Table_Name'][i])
    ibm_db.bind_param(validate_stmt, 3, df['Column_Name'][i])
    ibm_db.execute(validate_stmt)
    validation_result = ibm_db.fetch_both(validate_stmt)

    while validation_result != False:
        print(validation_result[0])
        validation_result = ibm_db.fetch_both(validate_stmt)

When I try to execute this code, Im hitting a SQLCODE=-104 error.

Any idea how the syntax should be for parameter binding?

Thanks, Ganesh

Upvotes: 0

Views: 214

Answers (1)

Mark Barinstein
Mark Barinstein

Reputation: 12314

2 major errors.
1. You can’t use a parameter marker for a table or column name (2-nd & 3-rd parameters).
2. You must specify the data type of the parameter marker, if it’s not possible to understand it from the query (1-st parameter). You must use something like «cast(? as data-type-desired)». But it’s just for you info, since you try to use it here as a column name, which is not possible as described in 1).

Upvotes: 1

Related Questions