2013-04-26 3 views
0

반환 된 열 중 하나에서 값을 임의로 자르는 oracle 저장 프로 시저에 커서가 있습니다.커서 열 값이 임의로 잘리지 않습니까?

나는이 패턴을 볼 수 없으며 때로는 값을 1 자 길이로 자릅니다. 테이블에서 scv_wn_roles swr.scv_code이다 절단되고

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; 

칼럼 :

이 커서이다. 가능한 값은 ('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

+0

테이블에 이러한 8 가지 역할 값만 있습니다. 지역 변수를 사용할 때 확인을 위해 표시 했습니까? 그렇게하면 'W'또는 더 긴 값이 표시됩니까? (왜 CHAR (3), VARCHAR (3)과 VARCHAR (4)를 같은 값으로 섞어 버리는가?) 데이터가 잘못되었거나 나중에 다른 것이 잘리는 지 궁금하다. 같은 proc의 테이블에서 값을 선택하면'W'가 표시됩니까? 아니면 proc이 끝난 후에 만 ​​관찰 할 수 있습니까? –

+0

안녕하세요, Alex 님, 답장을 보내 주셔서 감사합니다.표에는 16 개의 역할이 있지만 여러 회사 (1 & 4)는 있지만 내 테스트와 관련된 8 개의 역할 만 있습니다. 역할 테이블은 CHAR (3)로 정의 된 기존 테이블이므로 필요한 경우가 아니면 변경하지 않으려했습니다. 이게 내 문제 일 수 있다고 생각하니? 커서 쿼리를 수동으로 실행하면 절대로 절대로 절대로 올바른 역할 값을 항상 얻지 못합니다. 필자가 수동으로 Oracle SP를 실행하면 항상 1 회를 제외하고 계속 작동합니다. 나는 PLSQL에서 디버깅을 시도했는데 정의 된 로컬 변수로도 부정확 한 역할을하지는 못했다 .. – mcquaim

+0

두 개의 문자 만있는 scv_code의 값에 대해서만 일어 났습니까 ??? – psaraj12

답변

0

나는 그것을 파악하고 고맙게도가 위의 코드와 관련되지 않은, 내가 미친 줄 알았는데 .. IBM Datastage & Qualitystage에서 고유 한 QS 클라이언트 ID를 할당합니다. 이 배치 작업의 잘못된 디자인은이 테이블의 전체 내용을 임시 데이터 세트로 읽은 다음 새로운 QS ID로 다시 모두 다시 쓰는 것을 의미합니다.

문제는 임시 데이터 세트가 역할 ID에 1 문자 만 허용하므로 위의 역할을 자르는 것입니다.

위의 삽입은 실제로는 문제가되지 않지만 밤새 Datastage 작업이 필요합니다.

다른 사람에게 다시 한 번 감사드립니다.