It is possible to run iSeries™ server commands by using stored procedures. The two examples that are provided here apply to ODBC programs.
Simply call Execute Command (QCMDEXC) to run the command. The process is relatively simple, but ensure that you include all of the zeros in the length parameter. Use the Remote Command API as an alternative.
The first example enables the powerful SQL tracing facility that writes data into the joblog for the job running the SQL (in this case, the server job).
The second example overcomes a restriction in SQL: its limited ability to work with multi-member files. You cannot create a multi-member file through CREATE TABLE. However, the following example shows you how to access with ODBC anything but the first member of a file that is created through DDS:
Dim hStmt As Long
rc = SQLAllocHandle(SQL_HANDLE_STMT, ghDbc, hStmt)
If rc <> SQL_SUCCESS Then
Call DspSQLError(SQL_HANDLE_DBC, ghDbc, "Problem: Allocating Debug Statement Handle")
End If
' Note that the string within single quotes 'STRDBG UPDPROD(*YES)' is exactly 20 bytes
cmd = "call qsys.qcmdexc('STRDBG UPDPROD(*YES)',0000000020.00000)"
' Put the iSeries job in debug mode
rc = SQLExecDirect(hStmt, cmd, SQL_NTS)
If rc <> SQL_SUCCESS Then
Call DspSQLError(SQL_HANDLE_STMT, hStmt, "Problem: Start Debug")
End If
rc = SQLAllocHandle(SQL_HANDLE_STMT, ghDbc, ovrhstmt)
If rc <> SQL_SUCCESS Then
Call DspSQLError(SQL_HANDLE_DBC, ghDbc, "Problem: Allocating Override Statement Handle")
End If
' Note that the string within single quotes 'OVRDBF FILE(BRANCH)... OVRSCOPE(*JOB)'
is exactly 68 bytes
cmd = "call qsys.qcmdexc('OVRDBF FILE(BRANCH) TOFILE(HOALIB/BRANCH) MBR(FRANCE)
OVRSCOPE(*JOB)',0000000068.00000)"
' Override the iSeries file to point to the 'france' member
rc = SQLExecDirect(hStmt, cmd, SQL_NTS)
If rc <> SQL_SUCCESS Then
Call DspSQLError(SQL_HANDLE_STMT, hStmt, "File Override")
End If