Sometimes you may need to directly the extract the SAP PO message payload from the underlying database tables such as BC_MSG_LOG in SAP ASE 16.0 database.
This could also potentially be called: extracting hex encoded ASCII data from an ASE image column. Because the SAP PO tables use an ASE image data type to store the payload as an off-row LOB.
There are plenty of examples for doing this extraction in Oracle, but in ASE it is not so easy because the message size could be larger than that supported by the page size of ASE (usually 16k in an ASE for BusSuite).
This means you won’t be able to store it into a T-SQL variable and use the ASE functions.
Instead, we can use the below simple approach to extract the raw hex, and then use Python 2 to convert it to ASCII:
1, Execute the selection SQL using isql at the Linux command prompt on the database server:
isql -USAPSR3DB -S<SID> -w999 -X
select MSG_BYTES
from [SAPSR3DB.BC_MSG_LOG]
where MSG_ID='<YOUR MSG ID>'
and DIRECTION='OUTBOUND'
and LOG_LOCATION='MS'
go
The output will consist of hexadecimal output, which starts with “0x” and should look something like this:
0x2d2d5341505f6
…
Copy & paste into a text file on the Linux server (use your favourite text editor) and call the file data.txt.
Edit the data.txt file and remove the first “0x” characters from the data.
Remove all newlines and carriage returns in the file.
Now create a simple Python script to read the data from our file data.txt and translate from hex to ASCII then print to the screen:
with open('data.txt', 'r') as file:
data = file.read()
print data.decode('hex')
Run the Python script:
The output should contain a header and a footer which start with: “–SAP_”.
If you get an error from the Python script, then it could be because there are additional newlines or carriage returns in the data.txt file.