У меня есть курсор в хранимой процедуре оракула, которая случайным образом усекает значение в одном из возвращаемых столбцов.Значение столбца курсора случайным образом усекается?
Я не вижу ни одного шаблона для этого, иногда он работает в других случаях, он просто усекает значение до 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
Вы абсолютно уверены, что ваша таблица имеет только те 8 значений ролей? Когда вы использовали локальную переменную, вы отобразили ее для проверки, и если бы это показало «W» или более длинное значение? (Почему вы смешиваете 'CHAR (3)', 'VARCHAR (3)' и 'VARCHAR (4)' за одно и то же значение?) Мне интересно, есть ли у вас плохие данные или что-то еще усекает их позже - если вы выбираете значение обратно из таблицы в том же proc, что оно показывает 'W', или вы можете только наблюдать, что после завершения proc? –
Привет, Алекс, спасибо за ответ.В таблице есть 16 ролей, но для разных компаний (1 и 4), но только те 8, которые подходят для моего теста. Таблица ролей - это существующая таблица, которая была определена как CHAR (3), поэтому я не хотел ее менять, если это не требуется. Считаете ли вы, что это может быть моей проблемой? Если я запускаю запрос курсора вручную, я ВСЕГДА получаю правильные значения роли, никогда не усекающиеся. Если я вручную выполняю Oracle SP, он всегда работал, кроме 1 раза. Я пробовал отлаживать в PLSQL, и он никогда не выполнял эту роль, даже если моя локальная переменная определена. – mcquaim
это происходит только для значений scv_code, которые имеют только два символа ??? – psaraj12