어떻게 UTL_FILE을 사용하여 다중 라인 파일을 구문 분석합니까? 아래의 예에서 snippet - '1'로 시작하는 줄은 파일 헤더 - 파일 당 하나입니다. '5'로 시작하는 줄은 트랜잭션 헤더입니다. 트랜잭션 당 하나입니다. '8'로 시작하는 줄은 트랜잭션 트레일러입니다. '9'로 시작하는 줄은 파일 당 하나입니다.Oracle에서 다중 라인 플랫 파일 구문 분석
나는 1) 파일 행을 읽고 2) 트랜잭션이 시작하고 끝나는 곳을 구별 할 수있는 논리가 필요하다. 한 줄에, 나는 오라클이 그것의 다른 값을 구별하기위한 instr과 substr을 가지고 있다는 것을 알고있다.
모든 의견을 환영합니다! 시간 내 줘서 고마워.
1TreasuryPart 201610031830MEMO
53336 Bank1Base0000001
650 3100000126 1-30-00010-00 000002126100000000000000021261USD20161003RAYMOND SOLIS [email protected] 205-888-9900 20161003020030000001 WEBENRAPC34560000000000 WEB
800000000010000000212610000000000000000001
53336 Bank1Base0000002
800000000000000000000000000000000000000002
53343 ToddMUD 0000001
800000000000000000000000000000000000000001
53343 ToddMUD 0000002
800000000000000000000000000000000000000002
53351 DenisTM 0000001
650 3100000128 7779026 000004000000000000000000080000USD20161003Denis Pellerin [email protected] 405-922-2116 20161003100421000001 WEBUNEAPC34560000000000 WEB
650 3100000128 7779026 000004000000000000000000080000USD20161003Denis Pellerin [email protected] 405-922-2116 20161003100421000002 WEBUNEAPC34560000000000 WEB
800000000020000000800000000000000000000001
53351 DenisTM 0000002
800000000000000000000000000000000000000002
9000006000000000003000000101261000000000000
무엇을 시도 했습니까? 어떤 문제가 있습니까? 'SQL * Loader'가 아닌'utl_file'을 사용하기를 원한다고 말하면'get_line'을 호출하여 파일에서 행을 읽는 방법을 알고 있다고 가정합니다. 'substr'과'instr'을 사용하여 그 라인의 첫번째 문자를 얻을 수 있다는 것을 알고 있습니다. 이미 1과 5를 읽었는지 여부를 알려주는 일종의 지역 변수가 필요하므로 트랜잭션 행을 읽고 (그리고 행을 파싱하는 방법을 알고 있어야합니다.) –
나는 5 개의 임의의 수에 대해 1, 1의 레코드에 대해 1 레코드를 정의하고, 6의 수에 대해 1 레코드, 8의 수에 대해 1 레코드, 9에 대해 1 레코드를 정의했습니다. utl_file.fgetattr을 수행했습니다 파일이 존재하는지 확인하십시오. 레코드마다 레코드 변수를 파싱 할 수도 있습니다. 제가 언급했듯이, 첫 번째 줄부터 다음 줄로 읽는 방법, 그리고 트랜잭션 A가 끝나고 트랜잭션 B가 시작되는 지점을 파악할 때 붙어 있습니다. 위의 예에서 5와 8 사이에 두 개의 연속 된 6을 사용하는 것이 유효한 경우입니다. – QuickDrawMcgraw
"첫 번째 줄에서 다음 줄까지 읽음"이 무엇을 의미하는지 모르겠습니다. 필자는 파일에서 다음 줄을 얻기 위해 단순히'utl_file.get_line'을 호출하는 것으로 해석 할 것입니다. 그것은 실제로 당신이 요구하고있는 것 같지는 않습니다. 나는 트랜잭션을 읽기 위해서 당신이 8을 가질 때까지 당신이 5를 만났을 때 루프에서'utl_file.get_line'을 호출 할 것이라고 가정하지만, 그것은 파일의 구조를 추측합니다. –