Драйвер odbc возвратил ошибку sqlexecdirectw
To diagnose, we usually need to know the following, including version numbers. On Windows, be
sure to specify 32-bit Python or 64-bit:
- Python: 2.7.13
- pyodbc: lastest
- OS: Debian 8
- DB:SQL Server 2012
- driver:Microsoft ODBC Driver 17 for SQL Server & Microsoft ODBC Driver 13 for SQL Server
Issue
The text was updated successfully, but these errors were encountered:
@v-makouz My code is in my django project.
With debugging ,found the try self.cursor.execute(sql, params) throw the exception.
The variable sql is "u'SET NOCOUNT OFF; UPDATE [Profile_region] SET [region_name] = ?, [sns_app_id] = ?, [config_info] = ?, [receive_monthly_report] = ?, [receiver_mail_list] = ? WHERE [Profile_region].[region_code] = ?'"
The variable params is (u'\u83f2\u5f8b\u5bbe', 1, u'', 1, u'', u'philippine')
v-makouz commented May 29, 2018
It seems that I can execute this query without errors on my end, can you post ODBC trace? It would be helpful to see how variables are bound and such
EdwardNian commented May 30, 2018
@v-makouz Sorry for my poor knowledge about C/C++, could you tell me how I can get ODBC trace 😓 ?I could only debug Python code, and pyodbc was installed via pip. Thanks for your response ☺ !
v-makouz commented May 30, 2018
On Linux to enable ODBC tracing put the following at the beginning of odbcinst.ini:
[ODBC]
Trace=yes
TraceFile=/path/to/file/name.log
odbcinst.ini is usually located in /etc/odbcinst.ini, but you can check its location by running
EdwardNian commented May 31, 2018
@v-makouz I got the following trace
[ODBC][72][1527736383.286806][__handles.c][460]
Exit:[SQL_SUCCESS]
Environment = 0x7f041424f380
[ODBC][72][1527736383.286867][SQLSetEnvAttr.c][189]
Entry:
Environment = 0x7f041424f380
Attribute = SQL_ATTR_ODBC_VERSION
Value = 0x3
StrLen = 4
[ODBC][72][1527736383.286895][SQLSetEnvAttr.c][363]
Exit:[SQL_SUCCESS]
[ODBC][72][1527736383.286922][SQLAllocHandle.c][375]
Entry:
Handle Type = 2
Input Handle = 0x7f041424f380
[ODBC][72][1527736383.286948][SQLAllocHandle.c][493]
Exit:[SQL_SUCCESS]
Output Handle = 0x7f04142bc390
[ODBC][72][1527736383.287171][SQLDriverConnectW.c][290]
Entry:
Connection = 0x7f04142bc390
Window Hdl = (nil)
Str In = [UID=Dev-Dbuser;DATABASE=Ph-Dev;DRIVER=ODBC Driver 17 for SQL Server;MARS_Connection=yes;SERVER=sq. ][length = 252]
Str Out = (nil)
Str Out Max = 0
Str Out Ptr = (nil)
Completion = 0
UNICODE Using encoding ASCII 'ISO8859-1' and UNICODE 'UCS-2LE'
[ODBC][72][1527736383.642489][__handles.c][460]
Exit:[SQL_SUCCESS]
Environment = 0x7f0414342fc0
[ODBC][72][1527736383.642582][SQLGetEnvAttr.c][157]
Entry:
Environment = 0x7f0414342fc0
Attribute = 65002
Value = 0x7f0418e2a100
Buffer Len = 128
StrLen = 0x7f0418e2a09c
[ODBC][72][1527736383.642633][SQLGetEnvAttr.c][264]
Exit:[SQL_SUCCESS]
[ODBC][72][1527736383.642683][SQLFreeHandle.c][219]
Entry:
Handle Type = 1
Input Handle = 0x7f0414342fc0
v-chojas commented May 31, 2018
What version of unixODBC are you using? You can try the latest here to get a more informative trace.
Also worth posting is the table schema.
EdwardNian commented Jun 1, 2018
@v-chojas unixODBC version is 2.3.1-3. I install unixODBC, and this is the newest version. Do I need reinstall from source code?
v-chojas commented Jun 1, 2018
EdwardNian commented Jun 2, 2018
[ODBC][30544][1527906490.781621][__handles.c][460]
Exit:[SQL_SUCCESS]
Environment = 0x7f6d74369990
[ODBC][30544][1527906490.781709][SQLGetEnvAttr.c][157]
Entry:
Environment = 0x7f6d74369990
Attribute = 65002
Value = 0x7f6d7b597100
Buffer Len = 128
StrLen = 0x7f6d7b59709c
[ODBC][30544][1527906490.781760][SQLGetEnvAttr.c][264]
Exit:[SQL_SUCCESS]
[ODBC][30544][1527906490.781809][SQLFreeHandle.c][219]
Entry:
Handle Type = 1
Input Handle = 0x7f6d74369990
v-chojas commented Jun 4, 2018
Please try the unixODBC 2.3.7-pre on GitHub here, there is a bug with the logging that was fixed in it.
mkleehammer commented Sep 3, 2018
I'm going to close this due to inactivity, and because it sounds like many other "right truncation" issues that were fixed in a recent release. Please reoopen if this is still a problem.
Синтаксис
Аргументы
Возвращаемое значение
SQL_SUCCESS, SQL_SUCCESS_WITH_INFO, SQL_NEED_DATA, SQL_STILL_EXECUTING, SQL_ERROR, SQL_NO_DATA, SQL_INVALID_HANDLE или SQL_PARAM_DATA_AVAILABLE.
Диагностика
Если SQLExecDirect возвращает либо SQL_ERROR, либо SQL_SUCCESS_WITH_INFO, связанное значение SQLSTATE можно получить, вызвав SQLGetDiagRec с параметром handletype SQL_HANDLE_STMT и маркером статеменсандле. В следующей таблице перечислены значения SQLSTATE, обычно возвращаемые функцией SQLExecDirect , и объясняется каждый из них в контексте этой функции. Нотация "(DM)" предшествует описаниям SQLSTATE, возвращаемым диспетчером драйверов. Код возврата, связанный с каждым значением SQLSTATE, имеет SQL_ERROR, если не указано иное.
SQL_ ATTR_CONCURRENCY SQL_ ATTR_CURSOR_TYPE SQL_ ATTR_KEYSET_SIZE SQL_ ATTR_MAX_LENGTH SQL_ ATTR_MAX_ROWS SQL_ ATTR_QUERY_TIMEOUT SQL_ ATTR_SIMULATE_CURSOR
Значение данных, возвращаемое для параметра, привязанного как SQL_PARAM_INPUT_OUTPUT или SQL_PARAM_OUTPUT, не может быть преобразовано в тип данных, определяемый аргументом ValueType в SQLBindParameter.
* Статементтекст содержал параметр интервала с более чем одним полем, которое при преобразовании в числовой тип данных столбца не имело представления числового типа данных.
* статементтекст содержал данные параметров, которые были присвоены интервалу SQL типу, и не было представления значения типа C в поле interval SQL type.
назначение входного/выходного или выходного параметра, который был точным числом или интервалом, SQL тип с типом interval C привел к утрате значащих цифр.
Курсор был открыт, но не позиционирован на статеменсандле.
*Статементтекст содержит инструкцию ALTER TABLE , а указанное имя таблицы не существует.
*Статементтекст содержал инструкцию Create View , а имя таблицы или представления, определенное спецификацией запроса, не существовало.
*Статементтекст содержит инструкцию CREATE INDEX , а указанное имя таблицы не существует.
*Статементтекст содержит инструкцию Grant или REVOKE , а указанное имя таблицы или представления не существует.
*Статементтекст содержит инструкцию SELECT , а указанное имя таблицы или представления не существует.
*Статементтекст содержит инструкцию Delete, INSERT или Update , а указанное имя таблицы не существует.
*Статементтекст содержит оператор CREATE TABLE , а таблица, указанная в ограничении (ссылающаяся на таблицу, отличную от создаваемой), не существует.
*Статементтекст содержит инструкцию Grant или REVOKE , и указанное имя столбца не существует.
*Статементтекст содержит инструкцию SELECT, Delete, INSERT или Update , а указанное имя столбца не существует.
*Статементтекст содержит инструкцию CREATE TABLE , а столбец, указанный в ограничении (ссылающийся на таблицу, отличную от создаваемой), не существует.
(DM) SQLExecute, SQLExecDirect или SQLMoreResults были вызваны для статеменсандле и возвращены SQL_PARAM_DATA_AVAILABLE. Эта функция была вызвана до получения данных для всех потоковых параметров.
(DM) вызывается асинхронно исполняемая функция (не эта одна) для статеменсандле и все еще выполнялась при вызове этой функции.
Значение параметра, заданное с помощью SQLBindParameter, является пустым указателем, а значение длины параметра не равно 0, SQL_NULL_DATA, SQL_DATA_AT_EXEC, SQL_DEFAULT_PARAM или меньше или равно SQL_LEN_DATA_AT_EXEC_OFFSET.
Значение параметра, заданное с помощью SQLBindParameter, не является пустым указателем; тип данных C — SQL_C_BINARY или SQL_C_CHAR; и значение длины параметра было меньше 0, но не было SQL_NTS, SQL_NULL_DATA, SQL_DATA_AT_EXEC, SQL_DEFAULT_PARAM или меньше или равно SQL_LEN_DATA_AT_EXEC_OFFSET.
Комментарии
приложение вызывает SQLExecDirect для отправки оператора SQL в источник данных. Дополнительные сведения о прямом выполнении см. в разделе прямое выполнение. драйвер изменяет инструкцию для использования формы SQL, используемой источником данных, а затем отправляет его в источник данных. В частности, драйвер изменяет escape-последовательности, используемые для определения определенных функций в SQL. Синтаксис escape-последовательностей см. в разделе Escape-последовательности в ODBC.
приложение может включать один или несколько маркеров параметров в оператор SQL. чтобы включить маркер параметра, приложение внедряет вопросительный знак (?) в инструкцию SQL в соответствующей позиции. Дополнительные сведения о параметрах см. в разделе Параметры инструкции.
если инструкция SQL является инструкцией SELECT и если приложение с именем SQLSetCursorName связывает курсор с инструкцией, то драйвер использует указанный курсор. В противном случае драйвер создает имя курсора.
если источник данных находится в режиме фиксации вручную (требует явной инициации транзакции) и транзакция еще не запущена, драйвер инициирует транзакцию перед отправкой инструкции SQL. Дополнительные сведения см. в разделе режим фиксации вручную.
Если приложение использует SQLExecDirect для отправки инструкций commit или ROLLBACK , оно не будет взаимодействовать между продуктами СУБД. Для фиксации или отката транзакции приложение вызывает SQLEndTran.
Если SQLExecDirect встречает параметр данных при выполнении, он возвращает SQL_NEED_DATA. Приложение отправляет данные с помощью метод SQLParamData и SQLPutData. См. раздел SQLBindParameter, метод SQLParamData, SQLPutDataи Отправка длинных данных.
Если SQLExecDirect выполняет инструкцию обновления, вставки или удаления, которая не влияет ни на какие строки в источнике данных, вызов SQLExecDirect возвращает SQL_NO_DATA.
если значение атрибута оператора SQL_ATTR_PARAMSET_SIZE больше 1, а инструкция SQL содержит по крайней мере один маркер параметра, SQLExecDirect будет выполнять инструкцию SQL один раз для каждого набора значений параметров из массивов, на которые указывает аргумент параметервалуепоинтер в вызове SQLBindParameter. Дополнительные сведения см. в разделе массивы значений параметров.
Если закладки включены и выполняется запрос, который не поддерживает закладки, драйвер должен попытаться привести среду к той, которая поддерживает закладки, изменив значение атрибута и возвращая SQLSTATE 01S02 (значение параметра изменено). Если атрибут не может быть изменен, драйвер должен возвращать значение SQLSTATE HY024 (недопустимое значения атрибута).
при использовании пулов соединений приложение не должно выполнять инструкции SQL, которые изменяют базу данных или контекст базы данных, например инструкцию USE database в SQL Server, которая изменяет каталог, используемый источником данных.
Error Details
Error Codes: OPR4ONWY:U9IM8TAC:OI2DL65P
State: HY000. Code: 10058. [NQODBC] [SQL_STATE: HY000] [nQSError: 10058] A general error has occurred. [nQSError: 43113] Message returned from OBIS. [nQSError: 43119] Query Failed: [nQSError: 17001] Oracle Error code: 12154, message: ORA-12154: TNS:could not resolve the connect identifier specified at OCI call OCIServerAttach. [nQSError: 17014] Could not connect to Oracle database. (HY000)
Answers
It is clear that . Oracle is not connecting.
1) Check RPD Connection pool properties. give correct Datasource name and username/password.
2) If it is not connecting. then problem with tns file.
3)Have you copied tns file oracleBi home location. check once.
Mark if it helps you..
Is there any way , I can check my DAC services are up and running or not in LINUX?
check you tnsnames.ora
find in $ORACLE_HOME/network/admin/tnsnames.ora
find $ORACLE_HOME by echo $ORACLE_HOME
1)How to connect DAC 11g server with fusion middleware(weblogic server)?
Oracle® Fusion Middleware
User's Guide for Oracle Business Intelligence Data Warehouse
11g Release 1 (11.1.1)
DAC Authentication in Oracle Fusion Middleware (WebLogic Server) Mode
Oracle BI Applications Release (7.9.6.4) Certification Matrix:
This document covers Oracle BI Applications and associated components including:
∙ OEM Informatica PowerCenter 9.0.1 Hot Fix 2 and OEM Informatica PowerCenter 9.1 Hot Fix 2
∙ Oracle Business Intelligence Data Warehouse Administration Console 11g (DAC) version 11.1.1.6.4
Oracle BI Applications 7.9.6.4 is supported with
∙ Oracle Business Intelligence Enterprise Edition version 11.1.1.6.4+ and 11.1.1.7+
(To install Oracle BI Applications on Oracle Business Intelligence Enterprise Edition 11.1.1.7+, see the following document on My Oracle Support:
Installing BI Applications 7.9.6.4 on BI EE 11.1.1.7.0 [ID 1561846.1])
1)I have gone through this document, it doest specify thats i can use DAC 10g with OBIA 7.9.6.4.(if it is possible then whats is the patch number required.)
2)How to connect DAC 11g server with fusion middleware(weblogic server)?
1) According to Certification Matrix of (7.9.6.4) only DAC 11g is possible
2) This process is as follows:
1. DAC Client logs in using FMW authentication:
a. Gets user name and password from user (can be optionally saved on the file
b. Reads the database connection information from the encrypted cwallet.sso file
stored on the file system
c. Logs into the DAC repository.
d. Reads the DAC Server URL from the DAC repository.
e. Authenticates and gets permissions through the DAC Server in the BI domain
using the BI domain URL.
2. DAC Server reads the database connection information from the file system and
connects to the DAC repository upon startup.
3. Automation utilities read the database connection information from the file system
and connect to the DAC repository.
Note: The automation utilities are not interactive
4. DAC Server command line utilities read the DAC Server information from the file
system and send it as a Web service request, which is authenticated with proper
A cursor.execute("SELECT …") query against SQL Server with pyodbc is giving me this error:
pyodbc.ProgrammingError: ('42000', '[42000] [Microsoft][ODBC Driver 17 for SQL Server][SQL Server]HdfsBridge::recordReaderFillBuffer - Unexpected error encountered filling record reader buffer: NumberFormatException: For input string: "5,41E+18" (107090) (SQLExecDirectW)')
Any idea where that is coming from? Is it fixable on my (=pyodbc's) side? (The SQL DB is not under my control.)
Environment
- Python: Python 3.7.3 (default, Aug 20 2019, 17:04:43) [GCC 8.3.0] on linux
- pyodbc: pyodbc==4.0.26
- OS: Ubuntu 19.04
- DB: SQL Server
- driver: ODBC Driver 17 for SQL Server
The text was updated successfully, but these errors were encountered:
v-chojas commented Oct 21, 2019
Do you have a repro? That error is coming from the server.
pyodbc.ProgrammingError: ('42000', "[42000] [Microsoft][ODBC Driver 17 for SQL Server][SQL Server]External file access failed because the specified path name '/OK/FILESERVER/SOMEPATH/2019/10/07' does not exist. Enter a valid path and try again. (105002) (SQLExecDirectW)")
pyodbc.ProgrammingError: ('42000', '[42000] [Microsoft][ODBC Driver 17 for SQL Server][SQL Server]HdfsBridge::recordReaderFillBuffer - Unexpected error encountered filling record reader buffer: HadoopExecutionException: Not enough columns in this line. (107090) (SQLExecDirectW)')
I'm not sure how the SQL server is set up, these logs came from the client, I don't have direct access to the DB. But googling around, the errors seem related to Parquet or HDFS or Hadoop… maybe some SQL adapter? Is there such thing?
I've not seen this before, but I'm thinking the error could be related to the SQL Server's adapter configuration, rather than pyodbc.
@gordthompson there's no CAST/CONVERT, this is a straight up SELECT FROM [db_name].[schema_name].[table_name] .
v-chojas commented Oct 21, 2019
You are correct, those error messages are all coming from the server. pyODBC just passes through the query and otherwise has no involvement in this.
gordthompson commented May 29, 2021
Closed due to inactivity. Feel free to re-open with current information if necessary.
Читайте также: