|
ORACLE SERVER : ORACLE ENTERPRISE 10G
CLEINT OS : WIN XP
ORACLE CLIENT : ORACLE 10G CLIENT
C++ BUILDER 6.0
BDE : 5.2 VERSION
BDE DRIVER 설정
NATIVE : DLL32 : SQLORA8.DLL
VENDOR INIT : OCI.DLL
SQLPASS THRU MODE : SHARED AUTOCOMMIT
테스 예제 소스 :
void __fastcall TForm1::Button1Click(TObject *Sender)
{
pQry->SQL->Text ="MERGE INTO RSE_STATUS RS \
USING (SELECT :RSEID RSEID, \
to_date(:COLLECTDATE,'yyyymmddhh24miss') COLLECTDATE, \
:ANTENNACONNECT ANTENNACONNECT, \
:DBVERSION DBVERSION, \
:FIRMWAREVERSION FIRMWAREVERSION, \
:DOORSTATUS DOORSTATUS, \
:ANTENNAMODULESTATUS ANTENNAMODULESTATUS, \
:TXPOWERVALUE TXPOWERVALUE, \
:RXSENSITIVITYVALUE RXSENSITIVITYVALUE \
FROM DUAL \
) R \
ON (R.RSEID = RS.RSEID) \
WHEN MATCHED THEN \
update \
set RS.COLLECTDATE = R.COLLECTDATE, \
RS.ANTENNACONNECT = R.ANTENNACONNECT, \
RS.DBVERSION = R.DBVERSION, \
RS.FIRMWAREVERSION = R.FIRMWAREVERSION, \
RS.DOORSTATUS = R.DOORSTATUS, \
RS.ANTENNAMODULESTATUS = R.ANTENNAMODULESTATUS, \
RS.TXPOWERVALUE = R.TXPOWERVALUE, \
RS.RXSENSITIVITYVALUE = R.RXSENSITIVITYVALUE \
WHEN NOT MATCHED THEN \
INSERT VALUES (R.COLLECTDATE, \
R.RSEID, \
R.ANTENNACONNECT, \
R.DBVERSION, \
R.FIRMWAREVERSION, \
R.DOORSTATUS, \
R.ANTENNAMODULESTATUS, \
R.TXPOWERVALUE, \
R.RXSENSITIVITYVALUE \
)";
/*
pQry->ParamByName("RSEID")->AsString = "RSE0000000010";
pQry->ParamByName("COLLECTDATE")->AsString = "20050606010100";
pQry->ParamByName("ANTENNACONNECT")->AsString = "1";
pQry->ParamByName("DBVERSION")->AsString = "1";
pQry->ParamByName("FIRMWAREVERSION")->AsString = "1";
pQry->ParamByName("DOORSTATUS")->AsString = "1";
pQry->ParamByName("ANTENNAMODULESTATUS")->AsString = "1";
pQry->ParamByName("TXPOWERVALUE")->AsInteger = 1;
pQry->ParamByName("RXSENSITIVITYVALUE")->AsInteger = 1;
*/
pQry->Params->Items[0]->AsString = "RSE0000000010";
pQry->Params->Items[1]->AsString = "20050606010100";
pQry->Params->Items[2]->AsString = "1";
pQry->Params->Items[3]->AsString = "1";
pQry->Params->Items[4]->AsString = "1";
pQry->Params->Items[5]->AsString = "1";
pQry->Params->Items[6]->AsString = "1";
pQry->Params->Items[7]->AsInteger = 1;
pQry->Params->Items[8]->AsInteger = 1;
/*
if(!pQry->Prepared){
pQry->Close();
pQry->Prepare();
pQry->Open();
pQry->ExecSQL();
}
*/
pQry->Prepare() ;
pQry->ExecSQL();
}
실행 결과 ERROR 내용
Access violation at address 4D5F0385 in module 'SQLORA8.DLL'. Read of address 00000008. Process stopped...
merge into 구문에서만 bind 변수를 쓰면 위와 같은 에러가 발생합니다.
일반 insert, update는 이상없이 실행이 됩니다.
또는 merge into 구문에서 bind 변수를 안 쓰면 이상없이 실행이 됩니다.
일반 insert, update에서는 bind 변수를 써도 이상이 없습니다.
고수분들의 많은 도움말 부탁드리겠습니다.
|