Edit C:\Program Files (x86)\SAP BusinessObjects\SAP BusinessObjects Enterprise XI 4.0\win32_x86\odbc\7.0.1\help\reference\bulk.11.4.html
<?xml version="1.0" encoding="utf-8"?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xml:lang="en" lang="en" xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html;charset=utf-8" /> <meta http-equiv="Content-Style-Type" content="text/css" /> <!-- MOTW-DISABLED saved from url=(0014)about:internet --> <title>Export, Validate, and Load Functions</title> <link rel="StyleSheet" href="css/bulk.css" type="text/css" media="all" /> <link rel="StyleSheet" href="css/webworks.css" type="text/css" media="all" /> <script type="text/javascript" language="JavaScript1.2" src="wwhdata/common/context.js"></script> <script type="text/javascript" language="JavaScript1.2" src="wwhdata/common/towwhdir.js"></script> <script type="text/javascript" language="JavaScript1.2" src="wwhdata/common/wwhpagef.js"></script> <script type="text/javascript" language="JavaScript1.2"> <!-- var WebWorksRootPath = ""; // --> </script> <script type="text/javascript" language="JavaScript1.2"> <!-- // Set reference to top level help frame // var WWHFrame = WWHGetWWHFrame("", true); // --> </script> <script type="text/javascript" language="JavaScript1.2" src="scripts/expand.js"></script> </head> <body class="" style="background-color: #FFFFEE;" onload="WWHUpdate();" onunload="WWHUnload();" onkeydown="WWHHandleKeyDown((document.all||document.getElementById||document.layers)?event:null);" onkeypress="WWHHandleKeyPress((document.all||document.getElementById||document.layers)?event:null);" onkeyup="WWHHandleKeyUp((document.all||document.getElementById||document.layers)?event:null);"> <br /> <div class="WebWorks_Breadcrumbs" style="text-align: left;"> <a class="WebWorks_Breadcrumb_Link" href="bulk.11.1.html#117659">9 DataDirect Bulk Load</a> : Export, Validate, and Load Functions</div> <hr align="left" /> <blockquote> <div class="head_1"><a name="117659">Export, Validate, and Load Functions</a></div> <div class="Body"><a name="142035">The example code in this section shows the DataDirect functions for bulk exporting, </a>verification, and bulk loading. </div> <div class="head_2"><a name="137628">ExportTableToFile and ExportTableToFileW</a></div> <div class="gutter_text_right"><a name="117660">Syntax</a></div> <div class="syntax_first"><a name="121758">SQLReturn</a></div> <div class="syntax"><a name="121760">ExportTableToFile</a> (HDBC hdbc, </div> <div class="syntax"><a name="121761"> </a> SQLCHAR* TableName, </div> <div class="syntax"><a name="109426"> </a> SQLCHAR* FileName, </div> <div class="syntax"><a name="109427"> </a> SQLLEN IANAAppCodePage, </div> <div class="syntax"><a name="109428"> </a> SQLLEN ErrorTolerance, </div> <div class="syntax"><a name="109429"> </a> SQLLEN WarningTolerance, </div> <div class="syntax"><a name="109430"> </a> SQLCHAR* LogFile)</div> <div class="syntax_first"><a name="109459">ExportTableToFileW</a> (HDBC hdbc, </div> <div class="syntax"><a name="109460"> </a> SQLWCHAR* TableName, </div> <div class="syntax"><a name="109461"> </a> SQLWCHAR* FileName, </div> <div class="syntax"><a name="109462"> </a> SQLLEN IANAAppCodePage, </div> <div class="syntax"><a name="109463"> </a> SQLLEN ErrorTolerance, </div> <div class="syntax"><a name="109464"> </a> SQLLEN WarningTolerance, </div> <div class="syntax"><a name="109465"> </a> SQLWCHAR* LogFile)</div> <div class="Body"><a name="121806">The standard ODBC return codes are returned: SQL_SUCCESS, </a>SQL_SUCCESS_WITH_INFO, SQL_INVALID_HANDLE, and SQL_ERROR.</div> <div class="gutter_text_right"><a name="109254">Description</a></div> <div class="Body"><a name="121933">ExportTableToFile (ANSI application) and ExportTableToFileW (Unicode application) bulk </a>export a table to a physical file. Both a bulk data file and a bulk configuration file are produced by this operation. The configuration file has the same name as the data file, but with an XML extension. The bulk export operation can create a log file and can also export to external files. Refer to <span class="Cross_ref_"><a href="javascript:WWHClickedPopup('ODBC', 'advanced.06.6.html#109988', '');">â??External Overflow Filesâ??</a></span> in <span class="Cross_ref_"><a href="javascript:WWHClickedPopup('ODBC', 'advanced.06.1.html#119073', '');">Chapter 3</a></span> of the <span class="Emphasis">DataDirect Connect </span><span class="Emphasis">Series </span><span class="forbody">for</span> <span class="Emphasis" style="font-size: 8.0pt;">ODBC</span><span class="Emphasis" style="font-size: 10.0pt;"> Userâ??s Guide</span> for more information. The export operation can be configured such that if any errors or warnings occur:</div> <div class="list_bulleted_outer" style="margin-left: 0pt;"> <table border="0" cellspacing="0" cellpadding="0" summary=""> <tr style="vertical-align: baseline;"> <td> <div class="list_bulleted_inner" style="width: 18pt; white-space: nowrap;">â? </div> </td> <td width="100%"> <div class="list_bulleted_inner"><a name="121950">The operation always completes</a></div> </td> </tr> </table> </div> <div class="list_bulleted_single_outer" style="margin-left: 0pt;"> <table border="0" cellspacing="0" cellpadding="0" summary=""> <tr style="vertical-align: baseline;"> <td> <div class="list_bulleted_single_inner" style="width: 18pt; white-space: nowrap;">â? </div> </td> <td width="100%"> <div class="list_bulleted_single_inner"><a name="121954">The operation always terminates </a></div> </td> </tr> </table> </div> <div class="list_bulleted_single_outer" style="margin-left: 0pt;"> <table border="0" cellspacing="0" cellpadding="0" summary=""> <tr style="vertical-align: baseline;"> <td> <div class="list_bulleted_single_inner" style="width: 18pt; white-space: nowrap;">â? </div> </td> <td width="100%"> <div class="list_bulleted_single_inner"><a name="121955">The operation terminates after a certain threshold of warnings or errors is exceeded.</a></div> </td> </tr> </table> </div> <div class="gutter_text_right"><a name="109257">Parameters</a></div> <div class="Body"><span class="EquationVariables"><a name="166368">hdbc</a></span> is the driverâ??s connection handle, which is not the handle returned by SQLAllocHandle or SQLAllocConnect. To obtain the driver's connection handle, the application must then use the standard ODBC function SQLGetInfo (<span class="EquationVariables">ODBC Conn Handle</span>, <span class="EquationVariables">SQL_DRIVER_HDBC</span>).</div> <div class="Body"><span class="EquationVariables"><a name="109540">TableName</a></span> is a null-terminated string that specifies the name of the source database table that contains the data to be exported.</div> <div class="Body"><span class="EquationVariables"><a name="124397">FileName</a></span> is a null-terminated string that specifies the path (relative or absolute) and file name of the bulk load data file to which the data is to be exported. It also specifies the file name of the bulk configuration file. This file must not already exist. If the file already exists, an error is returned.</div> <div class="Body"><span class="EquationVariables"><a name="124398">IANAAppCodePage</a></span> specifies the code page value to which the driver must convert all data for storage in the bulk data file. Refer to <span class="Cross_ref_"><a href="javascript:WWHClickedPopup('ODBC', 'advanced.06.6.html#122965', '');">â??Character Set Conversionsâ??</a></span> in <span class="Cross_ref_"><a href="javascript:WWHClickedPopup('ODBC', 'advanced.06.1.html#119073', '');">Chapter 3</a></span> of the <span class="Emphasis">DataDirect Connect Series </span><span class="forbody">for</span> <span class="Emphasis" style="font-size: 8.0pt;">ODBC</span><span class="Emphasis" style="font-size: 10.0pt;"> Userâ??s Guide</span> for more information.</div> <div class="Body"><a name="124430">The default value on Windows is the current code page of the machine. On UNIX/Linux, the </a>default value is 4.</div> <div class="Body"><span class="EquationVariables"><a name="166372">ErrorTolerance</a></span> specifies the number of errors to tolerate before an operation terminates. A value of 0 indicates that no errors are tolerated; the operation fails when the first error is encountered.</div> <div class="Body"><a name="166373">The default of -1 means that an infinite number of errors is tolerated.</a></div> <div class="Body"><span class="EquationVariables"><a name="166374">WarningTolerance</a></span> specifies the number of warnings to tolerate before an operation terminates. A value of 0 indicates that no warnings are tolerated; the operation fails when the first warning is encountered.</div> <div class="Body"><a name="166375">The default of -1 means that an infinite number of warnings is tolerated.</a></div> <div class="Body"><span class="EquationVariables"><a name="121877">LogFile</a></span> is a null-terminated character string that specifies the path (relative or absolute) and file name of the bulk log file. Events logged to this file are:</div> <div class="list_bulleted_outer" style="margin-left: 0pt;"> <table border="0" cellspacing="0" cellpadding="0" summary=""> <tr style="vertical-align: baseline;"> <td> <div class="list_bulleted_inner" style="width: 18pt; white-space: nowrap;">â? </div> </td> <td width="100%"> <div class="list_bulleted_inner"><a name="121878">Total number of rows fetched</a></div> </td> </tr> </table> </div> <div class="list_bulleted_single_outer" style="margin-left: 0pt;"> <table border="0" cellspacing="0" cellpadding="0" summary=""> <tr style="vertical-align: baseline;"> <td> <div class="list_bulleted_single_inner" style="width: 18pt; white-space: nowrap;">â? </div> </td> <td width="100%"> <div class="list_bulleted_single_inner"><a name="121880">A message for each row that failed to export</a></div> </td> </tr> </table> </div> <div class="list_bulleted_single_outer" style="margin-left: 0pt;"> <table border="0" cellspacing="0" cellpadding="0" summary=""> <tr style="vertical-align: baseline;"> <td> <div class="list_bulleted_single_inner" style="width: 18pt; white-space: nowrap;">â? </div> </td> <td width="100%"> <div class="list_bulleted_single_inner"><a name="121881">Total number of rows that failed to export</a></div> </td> </tr> </table> </div> <div class="list_bulleted_single_outer" style="margin-left: 0pt;"> <table border="0" cellspacing="0" cellpadding="0" summary=""> <tr style="vertical-align: baseline;"> <td> <div class="list_bulleted_single_inner" style="width: 18pt; white-space: nowrap;">â? </div> </td> <td width="100%"> <div class="list_bulleted_single_inner"><a name="125974">Total number of rows successfully exported</a></div> </td> </tr> </table> </div> <div class="Body"><a name="126271">Information about the load is written to this file, preceded by a header. Information about the </a>next load is appended to the end of the file.</div> <div class="Body"><a name="121884">If LogFile is NULL, no log file is created.</a></div> <div class="head_3"><a name="124861">Example</a></div> <div class="syntax_first"><a name="125036">HDBC</a> hdbc;</div> <div class="syntax"><a name="124878">HENV</a> henv;</div> <div class="syntax"><a name="124879">void</a> *driverHandle;</div> <div class="syntax"><a name="124880">HMODULE</a> hmod;</div> <div class="syntax"><a name="124881">PExportTableToFile exportTableToFile;</a></div> <div class="syntax"><a name="124882"> </a></div> <div class="syntax"><a name="124883">char</a> tableName[128];</div> <div class="syntax"><a name="124884">char</a> fileName[512];</div> <div class="syntax"><a name="124885">char</a> logFile[512];</div> <div class="syntax"><a name="124886">int</a> errorTolerance;</div> <div class="syntax"><a name="124887">int</a> warningTolerance;</div> <div class="syntax"><a name="124888">int</a> codePage;</div> <div class="syntax"><a name="143201"> </a></div> <div class="syntax"><a name="143202">/* Get the driver's connection handle from the DM. This handle must be used </a>when calling directly into the driver. */</div> <div class="syntax"><a name="143203"> </a></div> <div class="syntax"><a name="124893">rc = SQLGetInfo (hdbc, SQL_DRIVER_HDBC, &driverHandle, 0, NULL);</a></div> <div class="syntax"><a name="132493">if (rc != SQL_SUCCESS) {</a></div> <div class="syntax"><a name="132494"> </a> ODBC_error (henv, hdbc, SQL_NULL_HSTMT);</div> <div class="syntax"><a name="132495"> </a> EnvClose (henv, hdbc);</div> <div class="syntax"><a name="124897"> </a> exit (255);</div> <div class="syntax"><a name="124898">}</a></div> <div class="syntax"><a name="124899"> </a></div> <div class="syntax"><a name="124900">/* Get the DM's shared library or DLL handle to the driver. */</a></div> <div class="syntax"><a name="124901"> </a></div> <div class="syntax"><a name="124902">rc = SQLGetInfo (hdbc, SQL_DRIVER_HLIB, &hmod, 0, NULL);</a></div> <div class="syntax"><a name="124903">if (rc != SQL_SUCCESS) {</a></div> <div class="syntax"><a name="124904"> </a> ODBC_error (henv, hdbc, SQL_NULL_HSTMT);</div> <div class="syntax"><a name="124905"> </a> EnvClose (henv, hdbc);</div> <div class="syntax"><a name="124906"> </a> exit (255);</div> <div class="syntax"><a name="124907">}</a></div> <div class="syntax"><a name="124908"> </a></div> <div class="syntax"><a name="124909">exportTableToFile = (PExportTableToFile)</a></div> <div class="syntax"><a name="124910"> </a> resolveName (hmod, "ExportTableToFile");</div> <div class="syntax"><a name="124911">if (! exportTableToFile) {</a></div> <div class="syntax"><a name="124912"> </a> printf ("Cannot find ExportTableToFile!\n");</div> <div class="syntax"><a name="124913"> </a> exit (255);</div> <div class="syntax"><a name="124914">}</a></div> <div class="syntax"><a name="124915"> </a></div> <div class="syntax"><a name="124916">rc = (*exportTableToFile) (</a></div> <div class="syntax"><a name="124917"> </a> driverHandle,</div> <div class="syntax"><a name="124918"> </a> (const SQLCHAR *) tableName,</div> <div class="syntax"><a name="124919"> </a> (const SQLCHAR *) fileName,</div> <div class="syntax"><a name="124920"> </a> codePage,</div> <div class="syntax"><a name="124921"> </a> errorTolerance, warningTolerance,</div> <div class="syntax"><a name="124922"> </a> (const SQLCHAR *) logFile);</div> <div class="syntax"><a name="124923">if (rc == SQL_SUCCESS) {</a></div> <div class="syntax"><a name="124924"> </a> printf ("Export succeeded.\n");</div> <div class="syntax"><a name="124925">}</a></div> <div class="syntax"><a name="124926">else {</a></div> <div class="syntax"><a name="124927"> </a> driverError (driverHandle, hmod);</div> <div class="syntax"><a name="124928">}</a></div> <div class="head_2"><a name="124864">ValidateTableFromFile and ValidateTableFromFileW</a></div> <div class="gutter_text_right"><a name="124458">Syntax</a></div> <div class="syntax_first"><a name="124459">SQLReturn</a></div> <div class="syntax"><a name="124460">ValidateTableFromFile</a> (HDBC hdbc, </div> <div class="syntax"><a name="124461"> </a> SQLCHAR* TableName, </div> <div class="syntax"><a name="124462"> </a> SQLCHAR* ConfigFile,</div> <div class="syntax"><a name="124463"> </a> SQLCHAR* MessageList, </div> <div class="syntax"><a name="124464"> </a> SQLULEN MessageListSize, </div> <div class="syntax"><a name="124465"> </a> SQLULEN* NumMessages)</div> <div class="syntax_first"><a name="124466">ValidateTableFromFileW</a> (HDBC hdbc, </div> <div class="syntax"><a name="124467"> </a> SQLCHAR* TableName, </div> <div class="syntax"><a name="124468"> </a> SQLCHAR* ConfigFile,</div> <div class="syntax"><a name="124469"> </a> SQLCHAR* MessageList, </div> <div class="syntax"><a name="124470"> </a> SQLULEN MessageListSize, </div> <div class="syntax"><a name="124471"> </a> SQLULEN* NumMessages)</div> <div class="Body"><a name="124472">The standard ODBC return codes are returned: SQL_SUCCESS, </a>SQL_SUCCESS_WITH_INFO, SQL_INVALID_HANDLE, and SQL_ERROR.</div> <div class="gutter_text_right"><a name="124473">Description</a></div> <div class="Body"><a name="124474">ValidateTableFromFile (ANSI application) and ValidateTablefromFileW (Unicode </a>application) verify the metadata in the configuration file against the data structure of the target database table. Refer to <span class="Cross_ref_"><a href="javascript:WWHClickedPopup('ODBC', 'advanced.06.6.html#130186', '');">â??Verification of the Bulk Load Configuration Fileâ??</a></span> in <span class="Cross_ref_"><a href="javascript:WWHClickedPopup('ODBC', 'advanced.06.1.html#119073', '');">Chapter 3</a></span> of the <span class="Emphasis">DataDirect Connect Series </span><span class="forbody">for</span> <span class="Emphasis" style="font-size: 8.0pt;">ODBC</span><span class="Emphasis" style="font-size: 10.0pt;"> Userâ??s Guide</span> for more detailed information.</div> <div class="Body"><a name="144764">NOTE FOR SALESFORCE USERS: The Salesforce driver does not support </a>ValidateTableFromFile and ValidateTableFromFileW.</div> <div class="gutter_text_right"><a name="124484">Parameters</a></div> <div class="Body"><span class="EquationVariables"><a name="166400">hdbc</a></span> is the driverâ??s connection handle, which is not the handle returned by SQLAllocHandle or SQLAllocConnect. To obtain the driver's connection handle, the application must then use the standard ODBC function SQLGetInfo (<span class="EquationVariables">ODBC Conn Handle</span>, <span class="EquationVariables">SQL_DRIVER_HDBC</span>).</div> <div class="Body"><span class="EquationVariables"><a name="124489">TableName</a></span> is a null-terminated character string that specifies the name of the target database table into which the data is to be loaded.</div> <div class="Body"><span class="EquationVariables"><a name="166404">ConfigFile</a></span> is a null-terminated character string that specifies the path (relative or absolute) and file name of the bulk configuration file.</div> <div class="Body"><span class="EquationVariables"><a name="124496">MessageList</a></span> specifies a pointer to a buffer used to record any of the errors and warnings. MessageList must not be null.</div> <div class="Body"><span class="EquationVariables"><a name="124497">MessageListSize</a></span> specifies the maximum number of characters that can be written to the buffer to which MessageList points. If the buffer to which MessageList points is not big enough to hold all of the messages generated by the validation process, the validation is aborted and SQL_ERROR is returned.</div> <div class="Body"><span class="EquationVariables"><a name="124498">NumMessages</a></span> contains the number of messages that were added to the buffer. This method reports the following criteria:</div> <div class="list_bulleted_outer" style="margin-left: 0pt;"> <table border="0" cellspacing="0" cellpadding="0" summary=""> <tr style="vertical-align: baseline;"> <td> <div class="list_bulleted_inner" style="width: 18pt; white-space: nowrap;">â? </div> </td> <td width="100%"> <div class="list_bulleted_inner"><a name="124499">Check data types - Each column data type is checked to ensure no loss of data occurs. </a>If a data type mismatch is detected, the driver adds an entry to the MessageList in the following format: <span class="Syntax">Risk of data conversion loss: Destination </span><span class="EquationVariables">column_number</span><span class="Syntax"> is of </span><span class="Syntax">type </span><span class="EquationVariables">x</span><span class="Syntax">, and source </span><span class="EquationVariables">column_number</span><span class="Syntax"> is of type </span><span class="EquationVariables">y</span>.</div> </td> </tr> </table> </div> <div class="list_bulleted_outer" style="margin-left: 0pt;"> <table border="0" cellspacing="0" cellpadding="0" summary=""> <tr style="vertical-align: baseline;"> <td> <div class="list_bulleted_inner" style="width: 18pt; white-space: nowrap;">â? </div> </td> <td width="100%"> <div class="list_bulleted_inner"><a name="124500">Check column sizes - Each column is checked for appropriate size. If column sizes are </a>too small in destination tables, the driver adds an entry to the MessageList in the following format: <span class="Syntax">Possible Data Truncation: Destination </span><span class="EquationVariables">column_number</span><span class="Syntax"> is of </span><span class="Syntax">size </span><span class="EquationVariables">x</span><span class="Syntax"> while source </span><span class="EquationVariables">column_number</span><span class="Syntax"> is of size </span><span class="EquationVariables">y</span>.</div> </td> </tr> </table> </div> <div class="list_bulleted_outer" style="margin-left: 0pt;"> <table border="0" cellspacing="0" cellpadding="0" summary=""> <tr style="vertical-align: baseline;"> <td> <div class="list_bulleted_inner" style="width: 18pt; white-space: nowrap;">â? </div> </td> <td width="100%"> <div class="list_bulleted_inner"><a name="124501">Check codepages - Each column is checked for appropriate code page alignment </a>between the source and destination. If a mismatch occurs, the driver adds an entry to the MessageList in the following format: <span class="Syntax">Destination column code page for </span><span class="EquationVariables">column_number</span><span class="Syntax"> risks data corruption if transposed without correct character </span><span class="Syntax">conversion from source </span><span class="EquationVariables">column_number</span>.</div> </td> </tr> </table> </div> <div class="list_bulleted_outer" style="margin-left: 0pt;"> <table border="0" cellspacing="0" cellpadding="0" summary=""> <tr style="vertical-align: baseline;"> <td> <div class="list_bulleted_inner" style="width: 18pt; white-space: nowrap;">â? </div> </td> <td width="100%"> <div class="list_bulleted_inner"><a name="124502">Check Config Col Info - The destination metadata and the column metadata in the </a>configuration file are checked for consistency of items such as length for character and binary data types, the character encoding code page for character types, precision and scale for numeric types, and nullablity for all types. If any inconsistency is found, the driver adds an entry to the MessageList in the following format: <span class="Syntax">Destination column </span><span class="Syntax">metadata for </span><span class="EquationVariables">column_number</span><span class="Syntax"> has column info mismatches from source </span><span class="EquationVariables">column_number</span>.</div> </td> </tr> </table> </div> <div class="list_bulleted_outer" style="margin-left: 0pt;"> <table border="0" cellspacing="0" cellpadding="0" summary=""> <tr style="vertical-align: baseline;"> <td> <div class="list_bulleted_inner" style="width: 18pt; white-space: nowrap;">â? </div> </td> <td width="100%"> <div class="list_bulleted_inner"><a name="124503">Check Column Names and Mapping - The columns defined in the configuration file are </a>compared to the destination table columns based on the order of the columns. If the number of columns in the configuration file and/or import file does not match the number of columns in the table, the driver adds an entry to the MessageList in the following format: <span class="Syntax">The number of destination columns </span><span class="EquationVariables">number</span><span class="Syntax"> does not match the </span><span class="Syntax">number of source columns </span><span class="EquationVariables">number</span>.</div> </td> </tr> </table> </div> <div class="Body"><a name="124504">The function returns an array of null-terminated strings in the buffer to which MessageList </a>points with an entry for each of these checks. If the driver determines that the information in the bulk load configuration file matches the metadata of the destination table, a return code of SQL_SUCCESS is returned and the MessageList remains empty. </div> <div class="Body"><a name="124505">If the driver determines that there are minor differences in the information in the bulk load </a>configuration file and the destination table, then SQL_SUCCESS_WITH_INFO is returned and the MessageList is populated with information on the cause of the potential problems. </div> <div class="Body"><a name="124506">If the driver determines that the information in the bulk load information file cannot </a>successfully be loaded into the destination table, then a return code of SQL_ERROR is returned and the MessageList is populated with information on the problems and mismatches between the source and destination.</div> <div class="head_3"><a name="124507">Example</a></div> <div class="syntax_first"><a name="125338">HDBC</a> hdbc;</div> <div class="syntax"><a name="125339">HENV</a> henv;</div> <div class="syntax"><a name="125340">void</a> *driverHandle;</div> <div class="syntax"><a name="125341">HMODULE</a> hmod;</div> <div class="syntax"><a name="125342">PValidateTableFromFile validateTableFromFile;</a></div> <div class="syntax"><a name="125343"> </a></div> <div class="syntax"><a name="125344">char</a> tableName[128];</div> <div class="syntax"><a name="125345">char</a> configFile[512];</div> <div class="syntax"><a name="125346">char</a> messageList[10240];</div> <div class="syntax"><a name="125347">SQLLEN</a> numMessages;</div> <div class="syntax"><a name="125348"> </a></div> <div class="syntax"><a name="125349">/* Get the driver's connection handle from the DM. This handle must be used </a>when calling directly into the driver. */</div> <div class="syntax"><a name="125351"> </a></div> <div class="syntax"><a name="125352">rc = SQLGetInfo (hdbc, SQL_DRIVER_HDBC, &driverHandle, 0, NULL);</a></div> <div class="syntax"><a name="125353">if (rc != SQL_SUCCESS) {</a></div> <div class="syntax"><a name="125354"> </a> ODBC_error (henv, hdbc, SQL_NULL_HSTMT);</div> <div class="syntax"><a name="125355"> </a> EnvClose (henv, hdbc);</div> <div class="syntax"><a name="125356"> </a> exit (255);</div> <div class="syntax"><a name="125357">}</a></div> <div class="syntax"><a name="125358"> </a></div> <div class="syntax"><a name="125359">/* Get the DM's shared library or DLL handle to the driver. */</a></div> <div class="syntax"><a name="125360"> </a></div> <div class="syntax"><a name="125361">rc = SQLGetInfo (hdbc, SQL_DRIVER_HLIB, &hmod, 0, NULL);</a></div> <div class="syntax"><a name="125362">if (rc != SQL_SUCCESS) {</a></div> <div class="syntax"><a name="125363"> </a> ODBC_error (henv, hdbc, SQL_NULL_HSTMT);</div> <div class="syntax"><a name="125364"> </a> EnvClose (henv, hdbc);</div> <div class="syntax"><a name="125365"> </a> exit (255);</div> <div class="syntax"><a name="125366">}</a></div> <div class="syntax"><a name="136251"> </a></div> <div class="syntax"><a name="136242">validateTableFromFile = (PValidateTableFromFile)</a></div> <div class="syntax"><a name="136243"> </a> resolveName (hmod, "ValidateTableFromFile");</div> <div class="syntax"><a name="136244">if (!validateTableFromFile) {</a></div> <div class="syntax"><a name="136245"> </a> printf ("Cannot find ValidateTableFromFile!\n");</div> <div class="syntax"><a name="136246"> </a> exit (255);</div> <div class="syntax"><a name="136247">}</a></div> <div class="syntax"><a name="125367"> </a></div> <div class="syntax"><a name="125368">messageList[0] = 0;</a></div> <div class="syntax"><a name="125369">numMessages = 0;</a></div> <div class="syntax"><a name="125370"> </a></div> <div class="syntax"><a name="125371">rc = (*validateTableFromFile) (</a></div> <div class="syntax"><a name="125372"> </a> driverHandle,</div> <div class="syntax"><a name="125373"> </a> (const SQLCHAR *) tableName,</div> <div class="syntax"><a name="125374"> </a> (const SQLCHAR *) configFile,</div> <div class="syntax"><a name="125375"> </a> (SQLCHAR *) messageList,</div> <div class="syntax"><a name="125376"> </a> sizeof (messageList),</div> <div class="syntax"><a name="125377"> </a> &numMessages);</div> <div class="syntax"><a name="125378">printf ("%d message%s%s\n", numMessages,</a></div> <div class="syntax"><a name="125379"> </a> (numMessages == 0) ? "s" :</div> <div class="syntax"><a name="125380"> </a> ((numMessages == 1) ? " : " : "s : "),</div> <div class="syntax"><a name="125381"> </a> (numMessages > 0) ? messageList : "");</div> <div class="syntax"><a name="125382">if (rc == SQL_SUCCESS) {</a></div> <div class="syntax"><a name="125383"> </a> printf ("Validate succeeded.\n");</div> <div class="syntax"><a name="125384">}</a></div> <div class="syntax"><a name="125385">else {</a></div> <div class="syntax"><a name="125386"> </a> driverError (driverHandle, hmod);</div> <div class="syntax"><a name="125387">}</a></div> <div class="head_2"><a name="132694">LoadTableFromFile and LoadTableFromFileW</a></div> <div class="gutter_text_right"><a name="134184">Syntax</a></div> <div class="syntax_first"><a name="132698">SQLReturn</a></div> <div class="syntax"><a name="110521">LoadTableFromFile</a> (HDBC hdbc, </div> <div class="syntax"><a name="110522"> </a> SQLCHAR* TableName, </div> <div class="syntax"><a name="144261"> </a> SQLCHAR* FileName, </div> <div class="syntax"><a name="144262"> </a> SQLLEN ErrorTolerance, </div> <div class="syntax"><a name="144263"> </a> SQLLEN WarningTolerance, </div> <div class="syntax"><a name="110575"> </a> SQLCHAR* ConfigFile,</div> <div class="syntax"><a name="110576"> </a> SQLCHAR* LogFile, </div> <div class="syntax"><a name="110577"> </a> SQLCHAR* DiscardFile, </div> <div class="syntax"><a name="110578"> </a> SQLULEN LoadStart, </div> <div class="syntax"><a name="110579"> </a> SQLULEN LoadCount,</div> <div class="syntax"><a name="110344"> </a> SQLULEN ReadBufferSize)</div> <div class="syntax_first"><a name="110349">LoadTableFromFileW</a> (HDBC hdbc, </div> <div class="syntax"><a name="110350"> </a> SQLWCHAR* TableName, </div> <div class="syntax"><a name="110351"> </a> SQLWCHAR* FileName, </div> <div class="syntax"><a name="110589"> </a> SQLLEN ErrorTolerance, </div> <div class="syntax"><a name="110590"> </a> SQLLEN WarningTolerance, </div> <div class="syntax"><a name="110591"> </a> SQLWCHAR* ConfigFile,</div> <div class="syntax"><a name="110592"> </a> SQLWCHAR* LogFile, </div> <div class="syntax"><a name="110593"> </a> SQLWCHAR* DiscardFile, </div> <div class="syntax"><a name="110594"> </a> SQLULEN LoadStart, </div> <div class="syntax"><a name="144336"> </a> SQLULEN LoadCount,</div> <div class="syntax"><a name="144337"> </a> SQLULEN ReadBufferSize)</div> <div class="Body"><a name="144338">The standard ODBC return codes are returned: SQL_SUCCESS, </a>SQL_SUCCESS_WITH_INFO, SQL_INVALID_HANDLE, and SQL_ERROR.</div> <div class="gutter_text_right"><a name="110603">Description</a></div> <div class="Body"><a name="121989">LoadTableFromFile (ANSI application) and LoadTablefromFileW (Unicode application) bulk </a>load data from a file to a table. The load operation can create a log file and can also create a discard file that contains rows rejected during the load. The discard file is in the same format as the bulk load data file. After fixing reported issues in the discard file, the bulk load can be reissued using the discard file as the bulk load data file.</div> <div class="Body"><a name="122066">The load operation can be configured such that if any errors or warnings occur:</a></div> <div class="list_bulleted_outer" style="margin-left: 0pt;"> <table border="0" cellspacing="0" cellpadding="0" summary=""> <tr style="vertical-align: baseline;"> <td> <div class="list_bulleted_inner" style="width: 18pt; white-space: nowrap;">â? </div> </td> <td width="100%"> <div class="list_bulleted_inner"><a name="121999">The operation always completes</a></div> </td> </tr> </table> </div> <div class="list_bulleted_single_outer" style="margin-left: 0pt;"> <table border="0" cellspacing="0" cellpadding="0" summary=""> <tr style="vertical-align: baseline;"> <td> <div class="list_bulleted_single_inner" style="width: 18pt; white-space: nowrap;">â? </div> </td> <td width="100%"> <div class="list_bulleted_single_inner"><a name="122000">The operation always terminates </a></div> </td> </tr> </table> </div> <div class="list_bulleted_single_outer" style="margin-left: 0pt;"> <table border="0" cellspacing="0" cellpadding="0" summary=""> <tr style="vertical-align: baseline;"> <td> <div class="list_bulleted_single_inner" style="width: 18pt; white-space: nowrap;">â? </div> </td> <td width="100%"> <div class="list_bulleted_single_inner"><a name="122025">The operation terminates after a certain threshold of warnings or errors is exceeded.</a></div> </td> </tr> </table> </div> <div class="Body"><a name="123860">If a load fails, the </a><span class="EquationVariables">LoadStart</span> and <span class="EquationVariables">LoadCount</span> parameters can be used to control which rows are loaded when a load is restarted after a failure.</div> <div class="gutter_text_right"><a name="110357">Parameters</a></div> <div class="Body"><span class="EquationVariables"><a name="166390">hdbc</a></span> is the driverâ??s connection handle, which is not the handle returned by SQLAllocHandle or SQLAllocConnect. To obtain the driver's connection handle, the application must then use the standard ODBC function SQLGetInfo (<span class="EquationVariables">ODBC Conn Handle</span>, <span class="EquationVariables">SQL_DRIVER_HDBC</span>).</div> <div class="Body"><span class="EquationVariables"><a name="159881">TableName</a></span> is a null-terminated character string that specifies the name of the target database table into which the data is to be loaded. For the Salesforce driver, the value of this parameter can vary. See <span class="Cross_ref_"><a href="javascript:WWHClickedPopup('reference', 'bulk.11.4.html#160360', '');">â??Using the TableName Parameter with the Salesforce Driverâ??</a></span> for more information.</div> <div class="Body"><span class="EquationVariables"><a name="130671">FileName</a></span> is a null-terminated string that specifies the path (relative or absolute) and file name of the bulk data file from which the data is to be loaded.</div> <div class="Body"><span class="EquationVariables"><a name="166379">ErrorTolerance</a></span> specifies the number of errors to tolerate before an operation terminates. A value of 0 indicates that no errors are tolerated; the operation fails when the first error is encountered.</div> <div class="Body"><a name="166380">The default of -1 means that an infinite number of errors is tolerated.</a></div> <div class="Body"><span class="EquationVariables"><a name="166381">WarningTolerance</a></span> specifies the number of warnings to tolerate before an operation terminates. A value of 0 indicates that no warnings are tolerated; the operation fails when the first warning is encountered.</div> <div class="Body"><a name="166382">The default of -1 means that an infinite number of warnings is tolerated.</a></div> <div class="Body"><span class="EquationVariables"><a name="166394">ConfigFile</a></span> is a null-terminated character string that specifies the path (relative or absolute) and file name of the bulk configuration file.</div> <div class="Body"><span class="EquationVariables"><a name="124293">LogFile</a></span> is a null-terminated character string that specifies the path (relative or absolute) and file name of the bulk log file. Events logged to this file are:</div> <div class="list_bulleted_outer" style="margin-left: 0pt;"> <table border="0" cellspacing="0" cellpadding="0" summary=""> <tr style="vertical-align: baseline;"> <td> <div class="list_bulleted_inner" style="width: 18pt; white-space: nowrap;">â? </div> </td> <td width="100%"> <div class="list_bulleted_inner"><a name="124605">Total number of rows read</a></div> </td> </tr> </table> </div> <div class="list_bulleted_single_outer" style="margin-left: 0pt;"> <table border="0" cellspacing="0" cellpadding="0" summary=""> <tr style="vertical-align: baseline;"> <td> <div class="list_bulleted_single_inner" style="width: 18pt; white-space: nowrap;">â? </div> </td> <td width="100%"> <div class="list_bulleted_single_inner"><a name="124646"> </a>Message for each row that failed to load.</div> </td> </tr> </table> </div> <div class="list_bulleted_single_outer" style="margin-left: 0pt;"> <table border="0" cellspacing="0" cellpadding="0" summary=""> <tr style="vertical-align: baseline;"> <td> <div class="list_bulleted_single_inner" style="width: 18pt; white-space: nowrap;">â? </div> </td> <td width="100%"> <div class="list_bulleted_single_inner"><a name="124607">Total number of rows that failed to load</a></div> </td> </tr> </table> </div> <div class="list_bulleted_single_outer" style="margin-left: 0pt;"> <table border="0" cellspacing="0" cellpadding="0" summary=""> <tr style="vertical-align: baseline;"> <td> <div class="list_bulleted_single_inner" style="width: 18pt; white-space: nowrap;">â? </div> </td> <td width="100%"> <div class="list_bulleted_single_inner"><a name="125963">Total number of rows successfully loaded</a></div> </td> </tr> </table> </div> <div class="Body"><a name="124298">Information about the load is written to this file, preceded by a header. Information about the </a>next load is appended to the end of the file.</div> <div class="Body"><a name="124300">If LogFile is NULL, no log file is created.</a></div> <div class="Body"><span class="EquationVariables"><a name="110881">DiscardFile</a></span> is a null-terminated character string that specifies the path (relative or absolute) and file name of the bulk discard file. Any row that cannot be inserted into database as result of bulk load is added to this file, with the last row to be rejected added to the end of the file.</div> <div class="Body"><a name="126252">Information about the load is written to this file, preceded by a header. Information about the </a>next load is appended to the end of the file.</div> <div class="Body"><a name="110917">If DiscardFile is NULL, no discard file is created.</a></div> <div class="Body"><span class="EquationVariables"><a name="110951">LoadStart</a></span> specifies the first row to be loaded from the data file. Rows are numbered starting with 1. For example, when LoadStart=10, the first 9 rows of the file are skipped and the first row loaded is row 10. This parameter can be used to restart a load after a failure.</div> <div class="Body"><span class="EquationVariables"><a name="110976">LoadCount</a></span> specifies the number of rows to be loaded from the data file. The bulk load operation loads rows up to the value of LoadCount from the file to the database. It is valid for LoadCount to specify more rows than exist in the data file. The bulk load operation completes successfully when either the LoadCount value has been loaded or the end of the data file is reached. This parameter can be used in conjunction with <span class="EquationVariables">LoadStart</span> to restart a load after a failure.</div> <div class="Body"><span class="EquationVariables"><a name="110998">ReadBufferSize</a></span> specifies the size, in KB, of the buffer that is used to read the bulk data file for a bulk load operation. The default is 2048.</div> <div class="head_3"><a name="112167">Example</a></div> <div class="syntax_first"><a name="125571">HDBC</a> hdbc;</div> <div class="syntax"><a name="125572">HENV</a> henv;</div> <div class="syntax"><a name="125573">void</a> *driverHandle;</div> <div class="syntax"><a name="125574">HMODULE</a> hmod;</div> <div class="syntax"><a name="125575">PLoadTableFromFile loadTableFromFile;</a></div> <div class="syntax"><a name="125577">char</a> tableName[128];</div> <div class="syntax"><a name="125578">char</a> fileName[512];</div> <div class="syntax"><a name="125579">char</a> configFile[512];</div> <div class="syntax"><a name="125580">char</a> logFile[512];</div> <div class="syntax"><a name="125581">char</a> discardFile[512];</div> <div class="syntax"><a name="125582">int</a> errorTolerance;</div> <div class="syntax"><a name="125583">int</a> warningTolerance;</div> <div class="syntax"><a name="125584">int</a> loadStart;</div> <div class="syntax"><a name="125585">int</a> loadCount;</div> <div class="syntax"><a name="125586">int</a> readBufferSize;</div> <div class="syntax"><a name="125587"> </a></div> <div class="syntax"><a name="125588">/* Get the driver's connection handle from the DM. This handle must be used </a>when calling directly into the driver. */</div> <div class="syntax"><a name="125590"> </a></div> <div class="syntax"><a name="125591">rc = SQLGetInfo (hdbc, SQL_DRIVER_HDBC, &driverHandle, 0, NULL);</a></div> <div class="syntax"><a name="125592">if (rc != SQL_SUCCESS) {</a></div> <div class="syntax"><a name="125593"> </a> ODBC_error (henv, hdbc, SQL_NULL_HSTMT);</div> <div class="syntax"><a name="125594"> </a> EnvClose (henv, hdbc);</div> <div class="syntax"><a name="125595"> </a> exit (255);</div> <div class="syntax"><a name="125596">}</a></div> <div class="syntax"><a name="125597"> </a></div> <div class="syntax"><a name="125598">/* Get the DM's shared library or DLL handle to the driver. */</a></div> <div class="syntax"><a name="125599"> </a></div> <div class="syntax"><a name="125600">rc = SQLGetInfo (hdbc, SQL_DRIVER_HLIB, &hmod, 0, NULL);</a></div> <div class="syntax"><a name="125601">if (rc != SQL_SUCCESS) {</a></div> <div class="syntax"><a name="125602"> </a> ODBC_error (henv, hdbc, SQL_NULL_HSTMT);</div> <div class="syntax"><a name="125603"> </a> EnvClose (henv, hdbc);</div> <div class="syntax"><a name="125604"> </a> exit (255);</div> <div class="syntax"><a name="125605">}</a></div> <div class="syntax"><a name="125606"> </a></div> <div class="syntax"><a name="125607">loadTableFromFile = (PLoadTableFromFile)</a></div> <div class="syntax"><a name="125608"> </a> resolveName (hmod, "LoadTableFromFile");</div> <div class="syntax"><a name="125609">if (! loadTableFromFile) {</a></div> <div class="syntax"><a name="125610"> </a> printf ("Cannot find LoadTableFromFile!\n");</div> <div class="syntax"><a name="125611"> </a> exit (255);</div> <div class="syntax"><a name="125612">}</a></div> <div class="syntax"><a name="125613"> </a></div> <div class="syntax"><a name="132431">rc = (*loadTableFromFile) (</a></div> <div class="syntax"><a name="132432"> </a> driverHandle,</div> <div class="syntax"><a name="132433"> </a> (const SQLCHAR *) tableName,</div> <div class="syntax"><a name="125617"> </a> (const SQLCHAR *) fileName,</div> <div class="syntax"><a name="125618"> </a> errorTolerance, warningTolerance,</div> <div class="syntax"><a name="125619"> </a> (const SQLCHAR *) configFile,</div> <div class="syntax"><a name="125620"> </a> (const SQLCHAR *) logFile,</div> <div class="syntax"><a name="125621"> </a> (const SQLCHAR *) discardFile,</div> <div class="syntax"><a name="125622"> </a> loadStart, loadCount,</div> <div class="syntax"><a name="125623"> </a> readBufferSize);</div> <div class="syntax"><a name="125624">if (rc == SQL_SUCCESS) {</a></div> <div class="syntax"><a name="125625"> </a> printf ("Load succeeded.\n");</div> <div class="syntax"><a name="125626">}</a></div> <div class="syntax"><a name="125627">else {</a></div> <div class="syntax"><a name="125628"> </a> driverError (driverHandle, hmod);</div> <div class="syntax"><a name="125629">}</a></div> <div class="head_3"><a name="160360">Using the TableName Parameter with the Salesforce Driver</a></div> <div class="Body" style="color: #000000; font-style: normal; font-variant: normal; font-weight: normal; margin-top: 0.0pt; text-transform: none; vertical-align: baseline;"><span style="color: #000000; font-size: 10.0pt; font-style: normal; font-variant: normal; font-weight: normal; text-transform: none; vertical-align: baseline;"><a name="160456">The value required in the TableName parameter varies, depending on the bulk operation </a></span><span style="color: #000000; font-size: 10.0pt; font-style: normal; font-variant: normal; font-weight: normal; text-transform: none; vertical-align: baseline;">specified in the SetBulkOperation function. The following paragraphs describe the </span><span style="color: #000000; font-size: 10.0pt; font-style: normal; font-variant: normal; font-weight: normal; text-transform: none; vertical-align: baseline;">TableName value based on whether the Bulk Operation type is set to INSERT, DELETE, or </span><span style="color: #000000; font-size: 10.0pt; font-style: normal; font-variant: normal; font-weight: normal; text-transform: none; vertical-align: baseline;">UPSERT.</span></div> <div class="hanging_label_head"><a name="160361">BULK_OPERATION_INSERT</a></div> <div class="syntax_first"><span class="EquationVariables"><a name="160363">table_name</a></span> [(<span class="EquationVariables">column_list</span>)]</div> <div class="Body"><a name="160365">Where </a></div> <div class="Body"><span class="EquationVariables"><a name="161107">column_list</a></span> is (<span class="EquationVariables">columnSpec</span>[, <span class="EquationVariables">columnSpec</span>]â?¦) and </div> <div class="Body"><span class="EquationVariables"><a name="161142">columnSpec</a></span> can be <span class="EquationVariables">columnName</span> or <span class="Syntax">foreignKeyColumnName EXT_ID externalIdColumnName</span>. </div> <div class="Body"><a name="160369">The column names define the mapping between columns in the table and columns in the </a>bulk data file. The column names can also indicate which columns are External ID columns. See <span class="Cross_ref_"><a href="javascript:WWHClickedPopup('reference', 'sqlsupport.12.20.html#199267', '');">â??Specifying an External ID Columnâ??</a></span> for more information.</div> <div class="Body"><a name="160374">The SQL equivalent of this function is: </a></div> <div class="syntax_first" style="color: #000000; font-style: normal; font-variant: normal; font-weight: normal; text-transform: none; vertical-align: baseline;"><span class="Syntax"><a name="161185">INSERT INTO </a></span><span class="EquationVariables">table_name</span><span class="Syntax"> [(</span><span class="EquationVariables">column_list</span><span class="Syntax">)] VALUES (? â?¦ ?) </span></div> <div class="hanging_label_head"><a name="160376">BULK_OPERATION_DELETE</a></div> <div class="syntax_first"><span class="EquationVariables"><a name="160378">table_name</a></span> (<span class="EquationVariables">column_list</span>) </div> <div class="Body"><a name="160380">Where </a><span class="EquationVariables">column_list</span> is the ID column, which identifies the row to delete.</div> <div class="Body"><a name="160384">For DELETE, the ID column is the only valid column in the column list. </a></div> <div class="Body"><a name="161232">The SQL equivalent of this function is: </a></div> <div class="syntax_first"><a name="160386">DELETE FROM table_name WHERE <column> = ? AND <column> = ? â?¦ </a></div> <div class="hanging_label_head"><a name="160388">BULK_OPERATION_UPDATE</a></div> <div class="syntax_first"><span class="EquationVariables"><a name="160390">table_name</a></span> (<span class="EquationVariables">column_list</span>) </div> <div class="Body"><a name="160392">Where </a><span class="EquationVariables">column_list</span> is <span class="EquationVariables">ID_column</span><span class="Syntax">, <update column>[,<update column>]â?¦</span></div> <div class="Body"><span class="EquationVariables"><a name="160396">ID_column</a></span> must be one of the columns in the column list. The ID column identifies which row to update; the other columns are the list of columns to be updated.</div> <div class="Body"><a name="161261">The SQL equivalent of this function is: </a></div> <div class="syntax_first"><span class="Syntax"><a name="160398">UPDATE </a></span><span class="EquationVariables">table_name</span><span class="Syntax"> SET <update column> = ? â?¦ WHERE <ID column> = ? â?¦</span> </div> <div class="hanging_label_head"><a name="160399">BULK_OPERATION_UPSERT</a></div> <div class="syntax_first"><span class="EquationVariables"><a name="160402">table_name</a></span> (<span class="EquationVariables">column_list</span>)</div> <div class="Body"><a name="160404">The column list is the same as for INSERT except that at least one of the columns must be </a>identified as an external ID (see <span class="Cross_ref_"><a href="javascript:WWHClickedPopup('reference', 'bulk.11.4.html#160361', '');">BULK_OPERATION_INSERT</a></span> ).</div> <div class="Body"><a name="161384">For UPSERT, </a><span class="EquationVariables">column_list</span> can be <span class="Syntax">(</span><span class="EquationVariables">columnSpec</span><span class="Syntax">[, </span><span class="EquationVariables">columnSpec</span><span class="Syntax">]â?¦)</span> </div> <div class="Body"><span class="EquationVariables"><a name="160408">columnSpec</a></span> can be one of the following:</div> <div class="list_bulleted_outer" style="margin-left: 0pt;"> <table border="0" cellspacing="0" cellpadding="0" summary=""> <tr style="vertical-align: baseline;"> <td> <div class="list_bulleted_inner" style="width: 18pt; white-space: nowrap;">â? </div> </td> <td width="100%"> <div class="list_bulleted_inner"><span class="EquationVariables"><a name="160410">columnName</a></span> </div> </td> </tr> </table> </div> <div class="list_bulleted_single_outer" style="margin-left: 0pt;"> <table border="0" cellspacing="0" cellpadding="0" summary=""> <tr style="vertical-align: baseline;"> <td> <div class="list_bulleted_single_inner" style="width: 18pt; white-space: nowrap;">â? </div> </td> <td width="100%"> <div class="list_bulleted_single_inner"><span class="Syntax"><a name="160661">foreignKeyColumnName EXT_ID externalIdColumnName</a></span> </div> </td> </tr> </table> </div> <div class="list_bulleted_single_outer" style="margin-left: 0pt;"> <table border="0" cellspacing="0" cellpadding="0" summary=""> <tr style="vertical-align: baseline;"> <td> <div class="list_bulleted_single_inner" style="width: 18pt; white-space: nowrap;">â? </div> </td> <td width="100%"> <div class="list_bulleted_single_inner"><span class="EquationVariables"><a name="160678">extIdColumn</a></span> <span class="Syntax">EXT_ID</span> </div> </td> </tr> </table> </div> <div class="Body_Indent"><a name="160416">where </a><span class="EquationVariables">extIdColumn</span> is the column that is checked to determine whether the row already exists in the database.</div> <div class="Body"><a name="161288">The SQL equivalent of this function is one of the following: </a></div> <div class="list_bulleted_outer" style="margin-left: 0pt;"> <table border="0" cellspacing="0" cellpadding="0" summary=""> <tr style="vertical-align: baseline;"> <td> <div class="list_bulleted_inner" style="width: 18pt; white-space: nowrap;">â? </div> </td> <td width="100%"> <div class="list_bulleted_inner"><a name="160703">If no row matching the tableâ??s key columns is found: </a></div> </td> </tr> </table> </div> <div class="syntax_embed_first"><span class="Syntax"><a name="161309">INSERT INTO </a></span><span class="EquationVariables">table_name</span><span class="Syntax"> [(</span><span class="EquationVariables">column_list</span><span class="Syntax">)] VALUES (? â?¦ ?)</span> </div> <div class="list_bulleted_outer" style="margin-left: 0pt;"> <table border="0" cellspacing="0" cellpadding="0" summary=""> <tr style="vertical-align: baseline;"> <td> <div class="list_bulleted_inner" style="width: 18pt; white-space: nowrap;">â? </div> </td> <td width="100%"> <div class="list_bulleted_inner"><a name="160418">If a row matching the tableâ??s key columns is found:</a></div> </td> </tr> </table> </div> <div class="syntax_embed_first"><span class="Syntax"><a name="161319">UPDATE </a></span><span class="EquationVariables">table_name</span><span class="Syntax"> SET <table column> = ? â?¦ WHERE <key column> = ? â?¦</span> </div> <div class="Body"><a name="160423">See </a><span class="Cross_ref_"><a href="javascript:WWHClickedPopup('reference', 'sqlsupport.12.20.html#199267', '');">â??Specifying an External ID Columnâ??</a></span> for more information.</div> <div class="Body_Wide"><a name="162909"> </a></div> <div class="head_2"><a name="153673">SetBulkOperation (Salesforce Driver Only) </a></div> <div class="gutter_text_right"><a name="153674">Syntax</a></div> <div class="syntax_first"><a name="153675">SQLReturn</a></div> <div class="syntax"><a name="153676">SetBulkOperation</a> (HDBC hdbc, </div> <div class="syntax"><a name="153677"> </a> SQLULEN <span class="EquationVariables">Operation</span>)</div> <div class="Body"><a name="161519">The standard ODBC return codes are returned: SQL_SUCCESS, </a>SQL_SUCCESS_WITH_INFO, SQL_INVALID_HANDLE, SQL_NO_DATA, and SQL_ERROR.</div> <div class="gutter_text_right"><a name="153678">Description</a></div> <div class="Body"><a name="153681">Specifies the bulk operation to be performed when the </a><span class="Cross_ref_"><a href="javascript:WWHClickedPopup('reference', 'bulk.11.4.html#132694', '');">LoadTableFromFile and LoadTableFromFileW</a></span> methods are called. The bulk operation remains set until SetBulkOperation is called again. When a connection is established, the initial bulk operation is BULK_OPERATION_INSERT.</div> <div class="gutter_text_right"><a name="153683">Parameters</a></div> <div class="Body"><span class="EquationVariables"><a name="153684">hdbc</a></span> is the driverâ??s connection handle, which is not the handle returned by SQLAllocHandle or SQLAllocConnect. To obtain the driver's connection handle, the application must use SQLGetInfo (<span class="EquationVariables">ODBC Conn Handle, SQL_DRIVER_HDBC</span>).</div> <div class="Body"><span class="EquationVariables"><a name="153685">Operation</a></span> is an integer value that specifies the bulk operation to set on the connection. It can have one of the following values:</div> <div class="list_bulleted_outer" style="margin-left: 0pt;"> <table border="0" cellspacing="0" cellpadding="0" summary=""> <tr style="vertical-align: baseline;"> <td> <div class="list_bulleted_inner" style="width: 18pt; white-space: nowrap;">â? </div> </td> <td width="100%"> <div class="list_bulleted_inner"><a name="153686">1 - BULK_OPERATION_INSERT</a></div> </td> </tr> </table> </div> <div class="list_bulleted_single_outer" style="margin-left: 0pt;"> <table border="0" cellspacing="0" cellpadding="0" summary=""> <tr style="vertical-align: baseline;"> <td> <div class="list_bulleted_single_inner" style="width: 18pt; white-space: nowrap;">â? </div> </td> <td width="100%"> <div class="list_bulleted_single_inner"><a name="153687">2 - BULK_OPERATION_UPDATE </a></div> </td> </tr> </table> </div> <div class="list_bulleted_single_outer" style="margin-left: 0pt;"> <table border="0" cellspacing="0" cellpadding="0" summary=""> <tr style="vertical-align: baseline;"> <td> <div class="list_bulleted_single_inner" style="width: 18pt; white-space: nowrap;">â? </div> </td> <td width="100%"> <div class="list_bulleted_single_inner"><a name="153688">3- BULK_OPERATION_DELETE </a></div> </td> </tr> </table> </div> <div class="list_bulleted_single_outer" style="margin-left: 0pt;"> <table border="0" cellspacing="0" cellpadding="0" summary=""> <tr style="vertical-align: baseline;"> <td> <div class="list_bulleted_single_inner" style="width: 18pt; white-space: nowrap;">â? </div> </td> <td width="100%"> <div class="list_bulleted_single_inner"><a name="153689">4 - BULK_OPERATION_UPSERT</a></div> </td> </tr> </table> </div> <div class="hanging_label_head"><a name="153690">Example</a></div> <div class="syntax_first"><a name="153691">HDBC</a> hdbc;</div> <div class="syntax"><a name="159017">HENV </a> henv;</div> <div class="syntax"><a name="159018">void </a> *driverHandle;</div> <div class="syntax"><a name="159019">HMODULE </a> hmod;</div> <div class="syntax"><a name="159020">PSetBulkOperation setBulkOperation;</a></div> <div class="syntax"><a name="159021"> </a></div> <div class="syntax"><a name="159022">/* Get the driver's connection handle from the DM. This handle must be used </a>when calling directly into the driver. */</div> <div class="syntax"><a name="159023"> </a></div> <div class="syntax"><a name="159024">rc = SQLGetInfo (hdbc, SQL_DRIVER_HDBC, &driverHandle, 0, NULL);</a></div> <div class="syntax"><a name="159025">if (rc != SQL_SUCCESS) { </a></div> <div class="syntax"><a name="159026"> </a> ODBC_error (henv, hdbc, SQL_NULL_HSTMT); </div> <div class="syntax"><a name="159027"> </a> EnvClose (henv, hdbc); </div> <div class="syntax"><a name="159028"> </a> exit (255);</div> <div class="syntax"><a name="159029">}</a></div> <div class="syntax"><a name="159030"> </a></div> <div class="syntax"><a name="159031">/* Get the DM's shared library or DLL handle to the driver. */</a></div> <div class="syntax"><a name="159032"> </a></div> <div class="syntax"><a name="159033">rc = SQLGetInfo (hdbc, SQL_DRIVER_HLIB, &hmod, 0, NULL);</a></div> <div class="syntax"><a name="159034">if (rc != SQL_SUCCESS) { </a></div> <div class="syntax"><a name="159035"> </a> ODBC_error (henv, hdbc, SQL_NULL_HSTMT); </div> <div class="syntax"><a name="159036"> </a> EnvClose (henv, hdbc); </div> <div class="syntax"><a name="159037"> </a> exit (255);</div> <div class="syntax"><a name="159038">}</a></div> <div class="syntax"><a name="159039"> </a></div> <div class="syntax"><a name="159040">/* Set the Bulk Operation type to DELETE. Any subsequent call to </a>LoadTableFromFile(W) will result in a bulk delete of the rows specified. */</div> <div class="syntax"><a name="159041"> </a></div> <div class="syntax"><a name="159042">setBulkOperation = (PSetBulkOperation) </a></div> <div class="syntax"><a name="159043"> </a> resolveName (hmod, "SetBulkOperation");</div> <div class="syntax"><a name="159044">if (! setBulkOperation) { </a></div> <div class="syntax"><a name="159045"> </a> printf ("Cannot find SetBulkOperation!\n"); </div> <div class="syntax"><a name="159046"> </a> exit (255);</div> <div class="syntax"><a name="159047">}</a></div> <div class="syntax"><a name="159048"> </a></div> <div class="syntax"><a name="159049">rc = (*setBulkOperation) ( </a></div> <div class="syntax"><a name="159050"> </a> driverHandle, </div> <div class="syntax"><a name="159051"> </a> BULK_OPERATION_DELETE);</div> <div class="syntax"><a name="159052">if (rc == SQL_SUCCESS) {</a></div> <div class="syntax"><a name="159053"> </a> printf ("Set Bulk operation(DELETE) succeeded.\n");</div> <div class="syntax"><a name="159054">}</a></div> <div class="syntax"><a name="159055">else {</a></div> <div class="syntax"><a name="159056"> </a> driverError (driverHandle, hmod);</div> <div class="syntax"><a name="153693">}</a></div> <div class="syntax"><a name="153696">/* */</a></div> <div class="head_2"><a name="153700">GetBulkOperation (Salesforce Driver Only) </a></div> <div class="gutter_text_right"><a name="153701">Syntax</a></div> <div class="syntax_first"><a name="153702">SQLReturn</a></div> <div class="syntax"><a name="153703">GetBulkOperation</a> (HDBC hdbc, </div> <div class="syntax"><a name="153704"> </a> SQLULEN *p<span class="EquationVariables">Operation</span>)</div> <div class="Body"><a name="153705">The standard ODBC return codes are returned: SQL_SUCCESS, </a>SQL_SUCCESS_WITH_INFO, SQL_INVALID_HANDLE, and SQL_ERROR.</div> <div class="gutter_text_right"><a name="153706">Description</a></div> <div class="Body"><a name="153707">Returns the bulk operation currently set on the connection. The bulk operation specifies the </a>operation to be performed when the LoadTableFromFile or LoadTableFromFileW methods are called (see <span class="Cross_ref_"><a href="javascript:WWHClickedPopup('reference', 'bulk.11.4.html#132694', '');">â??LoadTableFromFile and LoadTableFromFileWâ??</a></span>).</div> <div class="gutter_text_right"><a name="153709">Parameters</a></div> <div class="Body"><span class="EquationVariables"><a name="166386">hdbc</a></span> is the driverâ??s connection handle, which is not the handle returned by SQLAllocHandle or SQLAllocConnect. To obtain the driver's connection handle, the application must then use the standard ODBC function SQLGetInfo (<span class="EquationVariables">ODBC Conn Handle</span>, <span class="EquationVariables">SQL_DRIVER_HDBC</span>).</div> <div class="Body"><span class="Syntax"><a name="153714">p</a></span><span class="EquationVariables">Operation</span> is a pointer to the location where current bulk operation specified for the connection is returned. The returned value is one of the operation values defined by <span class="Cross_ref_"><a href="javascript:WWHClickedPopup('reference', 'bulk.11.4.html#153673', '');">â??SetBulkOperation (Salesforce Driver Only)â??</a></span>.</div> <div class="hanging_label_head"><a name="153715">Example</a></div> <div class="syntax_first"><a name="153716">HDBC</a> hdbc;</div> <div class="syntax"><a name="159193">HENV </a> henv;</div> <div class="syntax"><a name="159194">void </a> *driverHandle;</div> <div class="syntax"><a name="159195">HMODULE</a> hmod;</div> <div class="syntax"><a name="159196">PGetBulkOperation getBulkOperation;</a></div> <div class="syntax"><a name="159197">SQLULEN</a> bulkOperationType;</div> <div class="syntax"><a name="159198"> </a></div> <div class="syntax"><a name="159199">/* Get the driver's connection handle from the DM. This handle must be used </a>when calling directly into the driver. */</div> <div class="syntax"><a name="159200"> </a></div> <div class="syntax"><a name="159201">rc = SQLGetInfo (hdbc, SQL_DRIVER_HDBC, &driverHandle, 0, NULL);</a></div> <div class="syntax"><a name="159202">if (rc != SQL_SUCCESS) { </a></div> <div class="syntax"><a name="159203"> ODBC_error (henv, hdbc, SQL_NULL_HSTMT); </a></div> <div class="syntax"><a name="159204"> EnvClose (henv, hdbc); </a></div> <div class="syntax"><a name="159205"> exit (255);</a></div> <div class="syntax"><a name="159206">}</a></div> <div class="syntax"><a name="159207"> </a></div> <div class="syntax"><a name="159208">/* Get the DM's shared library or DLL handle to the driver. */</a></div> <div class="syntax"><a name="159209"> </a></div> <div class="syntax"><a name="159210">rc = SQLGetInfo (hdbc, SQL_DRIVER_HLIB, &hmod, 0, NULL);</a></div> <div class="syntax"><a name="159211">if (rc != SQL_SUCCESS) { </a></div> <div class="syntax"><a name="159212"> ODBC_error (henv, hdbc, SQL_NULL_HSTMT); </a></div> <div class="syntax"><a name="159213"> EnvClose (henv, hdbc); </a></div> <div class="syntax"><a name="159214"> exit (255);</a></div> <div class="syntax"><a name="159215">}</a></div> <div class="syntax"><a name="159216"> </a></div> <div class="syntax"><a name="159217">/* Get the current value for bulk operation. */</a></div> <div class="syntax"><a name="159218"> </a></div> <div class="syntax"><a name="159219">getBulkOperation = (PGetBulkOperation) </a></div> <div class="syntax"><a name="159220">resolveName (hmod, "GetBulkOperation");</a></div> <div class="syntax"><a name="159221">if (! getBulkOperation) { </a></div> <div class="syntax"><a name="159222"> printf ("Cannot find GetBulkOperation!\n"); </a></div> <div class="syntax"><a name="159223"> exit (255);</a></div> <div class="syntax"><a name="159224">}</a></div> <div class="syntax"><a name="159225"> </a></div> <div class="syntax"><a name="159226">rc = (*getBulkOperation) ( </a></div> <div class="syntax"><a name="159227">driverHandle, </a></div> <div class="syntax"><a name="159228">&bulkOperationType);</a></div> <div class="syntax"><a name="159229">if (rc == SQL_SUCCESS) {</a></div> <div class="syntax"><a name="159230"> printf ("Current bulk operation is: %u.\n", bulkOperationType);</a></div> <div class="syntax"><a name="159231">}</a></div> <div class="syntax"><a name="159232">else {</a></div> <div class="syntax"><a name="159233"> driverError (driverHandle, hmod);</a></div> <div class="syntax"><a name="159175">}</a></div> <div class="syntax"><a name="153720"> </a></div> <div class="syntax"><a name="153721">/* */</a></div> <script type="text/javascript" language="JavaScript1.2"> <!-- // Clear related topics // WWHClearRelatedTopics(); document.writeln(WWHRelatedTopicsInlineHTML()); // --> </script> </blockquote> <script type="text/javascript" language="JavaScript1.2"> <!-- document.write(WWHRelatedTopicsDivTag() + WWHPopupDivTag() + WWHALinksDivTag()); // --> </script> </body> </html>
Ms-Dos/Windows
Unix
Write backup
jsp File Browser version 1.2 by
www.vonloesch.de