У меня есть курсор в хранимой процедуре оракула, которая случайным образом усекает значение в одном из возвращаемых столбцов.
Я не вижу никакого шаблона для этого, иногда он работает, в других случаях он просто усекает значение до 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
W
или более длинное значение? (Почему вы смешиваетеCHAR(3)
,VARCHAR(3)
иVARCHAR(4)
для одного и того же значения?) Мне интересно, есть ли у вас неверные данные, или что-то еще обрезает их позже - если вы выбираете значение обратно из таблицы в том же проце, показывает ли этоW
, или вы можете наблюдать это только после завершения процесса? - person Alex Poole   schedule 26.04.2013