s23user Ответов: 2

Оператор Sql выполняется в oracle SQL developer tool без каких-либо ошибок, но тот же оператор при вызове из программы выдает ошибку.


I have an Insert Statement in VB

strSTMT = "INSERT INTO TABLE_ONE (T_NUM, T_BATCH_ID,CREATE_DATE,LAST_UPDATE_DATE) " & _
"SELECT '" & iStoreNum & "', T_BATCH_ID,SYSDATE,SYSDATE FROM Tbl_BATCH a" & _
" WHERE T_BATCH_TYPE = 'C'" & _
" AND T_BATCH_AUTO_ASSIGN = 'Y'" & _
" AND NOT EXISTS (SELECT ROWID FROM TABLE_ONE b WHERE T_NUM = " & iStoreNum & _
" AND a.T_BATCH_ID = b.T_BATCH_ID )"

whenever i tried to execute the statement, it throws exception : 

ORA-06550: line 1, column 351:
PL/SQL: ORA-00933: SQL command not properly ended
ORA-06550: line 1, column 7:
PL/SQL: SQL Statement ignored

I took the same Statement and executed in Oracel SQL developer tool, 
It does not throws any error. 


Что я уже пробовал:

Я даже закончил утверждение точкой с запятой , но это не сработало.
Чтобы пролить больше света, приложение было написано на .NET 2.0, я изменил его на 4.5. ранее приложение было рефреном на Oracle.dataaccess. client dll, но так как оно больше не поддерживается, я установил клиент OracleManagedAccess, это из-за этого?

2 Ответов

Рейтинг:
2

Nirav Prabtani

Ваш запрос кажется неправильным

<pre>strSTMT = "INSERT INTO TABLE_ONE (T_NUM, T_BATCH_ID,CREATE_DATE,LAST_UPDATE_DATE) " & _
"SELECT '" & iStoreNum & "', T_BATCH_ID,SYSDATE,SYSDATE FROM Tbl_BATCH a" & _
" WHERE T_BATCH_TYPE = 'C'" & _
" AND T_BATCH_AUTO_ASSIGN = 'Y'" & _
" AND (Missing Column Name) NOT EXISTS (SELECT ROWID FROM TABLE_ONE b WHERE T_NUM = " & iStoreNum & _
" AND a.T_BATCH_ID = b.T_BATCH_ID )"



Вы пропустили имя столбца в условии where, вместо этого укажите правильное имя столбца (Отсутствует Имя Столбца)

Дайте мне знать, если это не сработает.


Рейтинг:
0

njammy

1. Замените strSTMT объектом OracleCommand, передавая SQL-запрос.
2. Изменить SQL-запрос, чтобы быть запрограммированы, например
Выберите: iStoreNum,
и
Где T_NUM =: iStoreNum и так далее.
3. Создайте объекты параметров Oracle в команде Oracle перед ее выполнением.
Вот пример:
c# - OracleCommand привязка параметров SQL - переполнение стека[^]