Document Type | Technical Information
Category | Administration
Applicable Product Version | Tibero7
Document Number | TADTI167
Overview
This provides an example of running esql in multi thread.
When running esql in multi thread, you must add THREADS=YES option to the esql precompile command for compilation. Also, in the source code, set EXEC SQL ENABLE THREADS; and EXEC SQL CONTEXT USE DEFAULT;.
Method
Sample Code
#include <stdio.h>
#include <string.h>
void esql_error(int line_no, int err_no, char *file)
{
printf("esql test esql_error at %d : %d in %s\n", line_no, err_no, file);
}
void
main(void)
{
char *uid = "tibero";
char *pwd = "tmax";
int balance = 0;
sql_context ctx1;
sql_context ctx2;
printf("***** thread context test start *****\n\n");
EXEC SQL WHENEVER SQLERROR DO esql_error(__LINE__, sqlca.sqlcode, __FILE__);
EXEC SQL ENABLE THREADS;
EXEC SQL CONTEXT USE DEFAULT;
EXEC SQL CONNECT :uid IDENTIFIED BY :pwd;
EXEC SQL WHENEVER SQLERROR continue;
EXEC SQL DROP TABLE ACCOUNT;
EXEC SQL CREATE TABLE ACCOUNT (
ACCOUNT_ID CHAR(14),
BRANCH_CD CHAR(4),
CUSTOMER_ID CHAR(13),
ACCOUNT_TYPE CHAR(4),
BALANCE NUMBER(15, 5),
CREATE_DATE DATE,
EXPIRY_DATE DATE
);
EXEC SQL WHENEVER SQLERROR DO esql_error(__LINE__, sqlca.sqlcode, __FILE__);
EXEC SQL INSERT INTO account
VALUES ('ACCOUNT_ID_001', 'B003', 'CUSTOMER_ID_0',
'A002', 500000, '2003-10-5', '2005-10-5');
EXEC SQL INSERT INTO account
VALUES ('ACCOUNT_ID_002', 'B003', 'CUSTOMER_ID_1',
'A001', 10000, '2003-12-25', '2010-12-25');
EXEC SQL INSERT INTO account
VALUES ('ACCOUNT_ID_003', 'B001', 'CUSTOMER_ID_2',
'A003', 50000000, '1998-9-1', '2005-9-1');
EXEC SQL COMMIT WORK;
EXEC SQL CONTEXT ALLOCATE :ctx1;
EXEC SQL CONTEXT ALLOCATE :ctx2;
EXEC SQL CONTEXT USE :ctx1;
EXEC SQL CONNECT :uid IDENTIFIED BY :pwd;
EXEC SQL SELECT BALANCE INTO :balance FROM ACCOUNT
WHERE ACCOUNT_ID = 'ACCOUNT_ID_001';
if (balance != 500000)
printf("expected : 500000, real : %d\n", balance);
EXEC SQL CONTEXT USE :ctx2;
EXEC SQL CONNECT :uid IDENTIFIED BY :pwd;
EXEC SQL SELECT BALANCE INTO :balance FROM ACCOUNT
WHERE ACCOUNT_ID = 'ACCOUNT_ID_002';
if (balance != 10000)
printf("expected : 10000, real : %d\n", balance);
EXEC SQL CONTEXT FREE :ctx1;
EXEC SQL CONTEXT FREE :ctx2;
EXEC SQL CONTEXT USE DEFAULT;
EXEC SQL SELECT BALANCE INTO :balance FROM ACCOUNT
WHERE ACCOUNT_ID = 'ACCOUNT_ID_002';
if (balance != 10000)
printf("expected : 10000, real : %d\n", balance);
printf("***** thread context test end *****\n");
}
Execution
[tibero7_kb]tibero@ENT-ROCKY8:/tibero/user/kyobin_jeon/test> tbpc THREADS=YES sample1.tbc
tbESQL Precompiler 7
TmaxTibero Corporation Copyright (c) 2020-. All rights reserved.
sample1.tbc is precompiled successfully!
[tibero7_kb]tibero@ENT-ROCKY8:/tibero/user/kyobin_jeon/test> gcc -o sample1 sample1.c -L$TB_HOME/client/lib -ltbertl -l tbcli -lpthread -lm -I$TB_HOME/client/include
[tibero7_kb]tibero@ENT-ROCKY8:/tibero/user/kyobin_jeon/test> ls -lrt
total 132
drwxr-xr-x. 10 tibero dba 113 Nov 6 16:05 tibero7
-rw-r--r--. 1 tibero dba 669 Dec 17 08:42 test.tbc
-rw-r--r--. 1 tibero dba 16247 Dec 17 08:44 test.c
-rwxr-xr-x. 1 tibero dba 22440 Dec 17 08:44 test
-rw-r--r--. 1 tibero dba 2437 Dec 17 08:53 sample1.tbc
-rw-r--r--. 1 tibero dba 50457 Dec 17 08:54 sample1.c
-rwxr-xr-x. 1 tibero dba 30672 Dec 17 08:55 sample1
[tibero7_kb]tibero@ENT-ROCKY8:/tibero/user/kyobin_jeon/test> ./sample1
***** thread context test start *****
***** thread context test end *****