Problem Note 15575: Using DBSLICEPARM=ALL (FASTEXPORT) is unable to extract VARCHAR data
correctly
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
SAS System | SAS/ACCESS Interface to Teradata | Microsoft Windows NT Workstation | 9.1 TS1M3 | 9.1 TS1M3 SP4 |
Microsoft® Windows® for 64-Bit Itanium-based Systems | 9.1 TS1M3 | 9.1 TS1M3 SP4 |
Microsoft Windows XP 64-bit Edition | 9.1 TS1M3 | 9.1 TS1M3 SP4 |
Microsoft Windows Server 2003 Standard Edition | 9.1 TS1M3 | 9.1 TS1M3 SP4 |
Microsoft Windows Server 2003 Enterprise Edition | 9.1 TS1M3 | 9.1 TS1M3 SP4 |
Microsoft Windows 2000 Professional | 9.1 TS1M3 | 9.1 TS1M3 SP4 |
Microsoft Windows 2000 Server | 9.1 TS1M3 | 9.1 TS1M3 SP4 |
Microsoft Windows Server 2003 Datacenter Edition | 9.1 TS1M3 | 9.1 TS1M3 SP4 |
Microsoft Windows 2000 Datacenter Server | 9.1 TS1M3 | 9.1 TS1M3 SP4 |
z/OS | 9.1 TS1M3 | 9.1 TS1M3 SP4 |
Microsoft Windows 2000 Advanced Server | 9.1 TS1M3 | 9.1 TS1M3 SP4 |
64-bit Enabled Solaris | 9.1 TS1M3 | 9.1 TS1M3 SP4 |
Microsoft Windows XP Professional | 9.1 TS1M3 | 9.1 TS1M3 SP4 |
64-bit Enabled HP-UX | 9.1 TS1M3 | 9.1 TS1M3 SP4 |
64-bit Enabled AIX | 9.1 TS1M3 | 9.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.
Type: | Problem Note |
Priority: | alert |
Topic: | Data Management ==> Data Sources ==> External Databases ==> Teradata SAS Reference ==> LIBNAME Engines
|
Date Modified: | 2005-06-28 13:24:15 |
Date Created: | 2005-06-20 09:55:56 |