SUPPORT / SAMPLES & SAS NOTES
 

Support

Problem Note 15575: Using DBSLICEPARM=ALL (FASTEXPORT) is unable to extract VARCHAR data correctly

DetailsHotfixAboutRate It

SAS/ACCESS® Interface to Teradata using the DBSLICEPARM=ALL option which uses the FASTEXPORT utility is unable to extract VARCHAR data correctly. Data integrity issues result due to incorrect data being returned when using the interface. No errors or warning messages will be issued.

However, if attempting to process the Teradata data into an Oracle table using SAS/ACCESS Interface to Teradata and SAS/ACCESS Interface to Oracle, the following error may occur:

ERROR: ORACLE prepare error: ORA-01756: quoted string not properly terminated.

SAS receives data from FastExport on multiple threads (2 threads by default). Each SAS thread takes a bufferload of data from FastExport and transfers it to SAS internal buffers. VARCHAR data received from FastExport is prefixed with the length. The length is saved in a variable and is used for copying the VARCHAR data into SAS internal buffers and filling the remaining area with blanks. For example, if the length of the VARCHAR data is 3 and the maximum length of the VARCHAR data field has been defined as 30, the field with have 27 blank characters(30-3=27).

The problem is that the variable that stores the length is in a global structure that is accessible to both threads. So, if the row processed by one thread has COLUMN_NAME='~', the value is set to 1. If at the same time, the other thread processes a row with COLUMN_NAME='RUS', the global value will be set to 3 resulting in a race condition.

This problem will occur only with FastExport for VARCHAR columns on all platforms. If all the values in the VARCHAR column have the same length, this problem will not occur.

To workaround, you can change the VARCHAR columns to CHAR columns. The problem only happens with VARCHAR columns having data of varying lengths. Even with VARCHAR columns, if length of the data stored in all the VARCHAR columns is the same, it should also work. For example, you have two columns, VARCHAR(30) and VARCHAR(20), but all the data stored in those two columns are of constant length, for example all the data stored have length 5, it will work.

Select the Hot Fix tab in this note to access the hot fix for this issue.



Operating System and Release Information

Product FamilyProductSystemSAS Release
ReportedFixed*
SAS SystemSAS/ACCESS Interface to TeradataMicrosoft Windows NT Workstation9.1 TS1M39.1 TS1M3 SP4
Microsoft® Windows® for 64-Bit Itanium-based Systems9.1 TS1M39.1 TS1M3 SP4
Microsoft Windows XP 64-bit Edition9.1 TS1M39.1 TS1M3 SP4
Microsoft Windows Server 2003 Standard Edition9.1 TS1M39.1 TS1M3 SP4
Microsoft Windows Server 2003 Enterprise Edition9.1 TS1M39.1 TS1M3 SP4
Microsoft Windows 2000 Professional9.1 TS1M39.1 TS1M3 SP4
Microsoft Windows 2000 Server9.1 TS1M39.1 TS1M3 SP4
Microsoft Windows Server 2003 Datacenter Edition9.1 TS1M39.1 TS1M3 SP4
Microsoft Windows 2000 Datacenter Server9.1 TS1M39.1 TS1M3 SP4
z/OS9.1 TS1M39.1 TS1M3 SP4
Microsoft Windows 2000 Advanced Server9.1 TS1M39.1 TS1M3 SP4
64-bit Enabled Solaris9.1 TS1M39.1 TS1M3 SP4
Microsoft Windows XP Professional9.1 TS1M39.1 TS1M3 SP4
64-bit Enabled HP-UX9.1 TS1M39.1 TS1M3 SP4
64-bit Enabled AIX9.1 TS1M39.1 TS1M3 SP4
* For software releases that are not yet generally available, the Fixed Release is the software release in which the problem is planned to be fixed.