Выше указанная хранимая процедура должна вернуть новую строку, которая не содержит знаков препинания, а также все символы в верхнем регистре.
В предыдущем проекте использовался для артикулов только ISO8859_1,
новый проект требует использованиия UNICODE_FSS (желание заказчика)

в предыдущем проекте была написана UDF которая удаляла все ненужные символы.Обявлялась она так

DECLARE EXTERNAL FUNCTION STRIP_REF
    CSTRING(450)
RETURNS CSTRING(450) FREE_IT
ENTRY_POINT 'StripRef' MODULE_NAME 'libudf'

Текст такой (может кому надо)

library libudf;

{$R *.res}

uses Windows, SysUtils;

function StripString(st: string; CharsToStrip: string): string;
var
  I: Integer;
begin
  Result := '';
  for I := 1 to Length(st) do
  begin
    if Pos(st[I], CharsToStrip) = 0 then
      Result := Result + st[I];
  end;
end;

threadvar
  fcRef: PAnsiChar;

function StripRef(RefSrc: PChar): PChar; cdecl; export;
begin
  if Pos('temp', StrPas(RefSrc)) > 0 then
    fcRef := 'TEMP'
  else
    fcRef := PChar(AnsiUpperCase(StripString(StrPas(RefSrc),
' .,^«»®™/\:;-+*()|~`!@"#$&?''')));
  Result := fcRef;
end;

exports
  StripRef name 'StripRef';

begin
  System.IsMultiThread := True;
end.

В новом проекте я решил использовать PWideChar вместо PChar,
но результат работы тестовой библиотеки показал, что возвращается
искаженный результат.

Ответить