I use unidac 7.2.7 version for oracle.
I got this error 'ORA-01008: not all variables bound' that occured when we use oracle merge statement.
I think it's same error at this link 'viewtopic.php?f=1&t=30679'.
Test scheme is like this.
Code: Select all
CREATE TABLE TEST_T1 (
COL1 VARCHAR2(5 BYTE) NOT NULL,
COL2 VARCHAR2(10 BYTE) NOT NULL,
COL3 VARCHAR2(10 BYTE) NOT NULL,
COL4 VARCHAR2(50 BYTE) NOT NULL,
COL5 NUMBER(20, 0) NOT NULL,
COL6 VARCHAR2(25 BYTE) NOT NULL,
COL7 VARCHAR2(20 BYTE) NOT NULL,
COL8 VARCHAR2(20 BYTE) DEFAULT 'NULL' NOT NULL,
COL9 NUMBER(8, 0) DEFAULT 0,
COL10 NUMBER(8, 0) DEFAULT 0,
COL11 VARCHAR2(16 BYTE),
COL12 DATE DEFAULT SYSDATE,
COL13 VARCHAR2(16 BYTE),
COL14 DATE DEFAULT SYSDATE,
CONSTRAINT PK_TEST_T1 PRIMARY KEY (COL1, COL2, COL3, COL4, COL5)
)
Code: Select all
MERGE INTO TEST_T1
USING DUAL
ON ( COL1 = :COL1
AND COL2 = :COL2
AND COL3 = :COL3
AND COL4 = :COL4
AND COL6 = :COL6
AND COL7 = :COL7
AND COL8 = :COL8)
WHEN MATCHED THEN
UPDATE SET COL9 = COL9 + :COL9
WHEN NOT MATCHED THEN
INSERT
(COL1, COL2, COL3, COL4, COL5,
COL6, COL7, COL8, COL9, COL11, COL12)
VALUES
(:COL1, :COL2, :COL3, :COL4, :COL5,
:COL6, :COL7, :COL8, :COL9, :COL11, SYSDATE)
Code: Select all
Qry.Close;
Qry.SQL.Text := sSqlDetail;
Qry.ParamByName('COL1').AsString := 'T';
Qry.ParamByName('COL2').AsString := 'E';
Qry.ParamByName('COL3').AsString := 'S';
Qry.ParamByName('COL4').AsString := 'T';
Qry.ParamByName('COL5').AsInteger := 0;
Qry.ParamByName('COL6').AsString := 'E';
Qry.ParamByName('COL7').AsString := 'N';
Qry.ParamByName('COL8').AsString := 'D';
Qry.ParamByName('COL9').AsInteger := 0;
Qry.ParamByName('COL11').AsString := '.';
Qry.ExecSQL;
Code: Select all
ORA-01008: not all variables bound