Значение столбца курсора случайно усекается?

У меня есть курсор в хранимой процедуре оракула, который случайно обрезает значение в одном из возвращаемых столбцов.

Я не вижу никакой картины в этом, иногда это работает, а иногда просто обрезает значение до 1 символа в длину.

Это курсор:

CURSOR cur_clients IS
    SELECT DISTINCT p.PROPOSAL_ID, rop.client_id, c.FORENAME, c.INITIAL1, c.SURNAME, concat(c.FORENAME,c.SURNAME),
      c.DATE_OF_BIRTH, c.SEX, a.ADDRESS_LINE1, a.ADDRESS_LINE2, a.ADDRESS_LINE3, a.ADDRESS_LINE4, '', a.POSTCODE, c.PPSN_NO, swr.scv_code
      FROM proposal p, roleonproposal rop, client c, address a, scv_wn_roles swr
      WHERE p.proposal_id = p_proposal_id
      AND p.proposal_id = rop.proposal_id
      AND rop.ROLE_ID <> v_Role
      AND rop.CLIENT_ID = c.CLIENT_ID
      AND c.CLIENT_ID = a.CLIENT_ID
      AND p.PROPOSAL_ID = a.PROPOSAL_ID
      AND rop.role_id = swr.id
      AND p.company_id = swr.company_id;

Усеченный столбец - это swr.scv_code из таблицы scv_wn_roles. Возможны следующие значения ("WL1", "WL2", "WG", "WB", "WD", "WP", "WT", "WE"), но иногда вставляется только W.

Затем я перебираю курсор следующим образом:

FOR c_client IN cur_clients LOOP

И таблица, где роль вставляется как W, находится здесь:

INSERT INTO scv_policy_client_lookup spc
   (spc.policy_number, spc.system_client_id, spc.qsclient_id, spc.role_id)
VALUES
   (c_client.proposal_id, c_client.client_id, v_QS_id, c_client.scv_code);

Структура этих двух таблиц следующая:

create table SCV_WN_ROLES
(
  ID              NUMBER(10) not null,
  REF_DESCRIPTION VARCHAR2(50),
  COMPANY_ID      NUMBER not null,
  SCV_CODE        CHAR(3)
);

А также,

create table SCV_POLICY_CLIENT_LOOKUP
(
  POLICY_NUMBER    VARCHAR2(42) not null,
  SYSTEM_CLIENT_ID VARCHAR2(51) not null,
  QSCLIENT_ID      NUMBER(38,10) not null,
  ROLE_ID          VARCHAR2(4) not null,
  COUNTRY_IND      VARCHAR2(1) default 'R'
)

Столбец swr.scv_code вставляется в другие таблицы в хранимой процедуре, и в них он работает нормально, только эта таблица поиска.

Я попытался переместить значение курсора c_client.scv_code в локальную переменную VARCHAR2(3) и затем записать это в таблицу поиска, но это тоже не всегда работает.

Мы находимся на Oracle 11g, если это имеет значение.

Кто-нибудь заметил что-нибудь подозрительное?

Спасибо за помощь, mcquaim

1 ответ

Решение

Я понял это и, к счастью, это не было связано с приведенным выше кодом, думал, что я схожу с ума..

У нас есть ночное пакетное задание, которое выполняется в IBM Datastage & Qualitystage и присваивает уникальные идентификаторы клиента QS. Плохой дизайн этого пакетного задания означал, что он считывал все содержимое этой таблицы во временный набор данных, а затем записывал все обратно с новыми идентификаторами QS.

Проблема заключается в том, что временный набор данных допускает только 1 символ для идентификатора роли и, следовательно, усекает вышеуказанные роли.

Вставка выше на самом деле хорошо, но это ночная работа Datastage, которая вызывает проблемы.

Еще раз спасибо за всех, кто смотрел.

Другие вопросы по тегам