pikarus написал(а):
Ну не знаю уже, все рекомендации перепробовал - не выходит цветок каменный.
И чарсеты вроде правильные указываю - CL8MSWIN1251 для ORACLE, WE8DEC для SAP (пробовал и UTF8 и RU8PC866, но в
V&NLS_PARAMETERS именно WE8DEC) - не ищет зараза и все...
Может есть у кого полностью рабочий пример?
еще был вариант для древнего оракла.
самописная функция
Code:
CREATE OR REPLACE FUNCTION shema."HEXTORUS" (str in varchar2) return varchar2 is
Result varchar2(8192);
chrx int;
curr int;
indx int := 1;
Begin
while indx < length(str) LOOP
if SUBSTR(str, indx, 2) = '00' then exit; end if;
curr := ASCII(SUBSTR(str, indx, 1));
chrx := curr-48; if chrx > 9 THEN chrx := chrx-7; END IF;
curr := ASCII(SUBSTR(str, indx+1, 1))-48;
if curr > 9 THEN curr := curr-7; END IF;
chrx:=chrx*16+curr;
result := result || CHR(chrx);
indx := indx+2;
END LOOP;
return(RTRIM(Result,' '));
end hextorus;
в SAP ФМ
Code:
FUNCTION ZC2X.
*"----------------------------------------------------------------------
*"*"Локальный интерфейс:
*" IMPORTING
*" VALUE(P_STRING)
*" CHANGING
*" REFERENCE(P_VALUE)
*"----------------------------------------------------------------------
*DATA l_type TYPE c.
DATA lc_conv TYPE REF TO cl_abap_conv_out_ce.
DATA l_len TYPE i.
DATA l_string TYPE string.
DATA l_endia TYPE abap_endia.
l_string = p_string.
l_endia = 'B'.
CALL METHOD cl_abap_conv_out_ce=>create
EXPORTING
endian = l_endia
encoding = '1504'
replacement = space
ignore_cerr = abap_true
RECEIVING
conv = lc_conv.
TRY.
CALL METHOD lc_conv->write
EXPORTING
data = l_string
IMPORTING
len = l_len.
* Should ignore errors in code conversions
CATCH cx_sy_conversion_codepage.
CATCH cx_sy_codepage_converter_init.
CATCH cx_parameter_invalid_type.
CATCH cx_parameter_invalid_range.
ENDTRY.
p_value = lc_conv->get_buffer( ).
ENDFUNCTION.
а работало все это таким образом
Code:
report z_report.
data: in_string(20), out_string(20) type x.
...
CALL FUNCTION 'ZC2X'
EXPORTING
P_STRING = in_string
CHANGING
P_VALUE = out_string.
...
exec sql.
update shema.table1@base
set
... bla bla bla
where field1 = shema.hextorus@base(:out_string)
endexec.