아래 나와있는 다른 표에 설명 된 규칙 집합을 충족 시키려면 파일의 모든 레코드 레코드를 읽고 다른 파일에 삽입해야하는 요구 사항이 있습니다. .동적으로 SQL 문을 준비하는 논리
이 첫 번째 파일에서 읽은 후 레코드는 두 번째 테이블에 기록하는 것을받을 수 있도록 하나 이상의 규칙의 모든 시퀀스를 충족해야한다.
예를 들어 CAR 파일에서 레코드를 읽은 후에는 적어도 하나 이상의 규칙 집합의 모든 시퀀스가 충족 될 때까지 아래의 규칙을 확인해야합니다. 이를 위해 나는 이런 종류의 동적 SQL 프로그램을 만들 계획을 세웠다. 그러나 Prepared SQL은 호스트 변수를 지원하지 않으므로이 기능은 작동하지 않습니다.
어떤 몸이 제안 또는 SQL statemtns 동적를 생성하고이 두 번째 파일에 입력하는 레코드가 필요한 규칙을 만족하는지 확인하는 방법에 대한 지침을 제공 할 수있는 경우
, 그것은 좋은 것그래서 기본적으로 내가 찾고있는 것은 테이블에서 필드를 선택하면 추가 확인 및 검사를 수행하기 위해 어딘가에 저장하는 방법입니다. 이는 아래와 같이
H Option(*NoDebugIO:*SrcStmt)
D RULEDS E DS EXTNAME(RULESTABLE)
D MAXRUL S 1 0
D MAXSEQ S 1 0
D STMT S 512
D WHERESTMT S 512 INZ('')
D FullSqlStmt S 512 INZ('')
D RULINDEX S 1 0 INZ(1)
D SEQINDEX S 1 0 INZ(1)
D APOS C CONST('''')
/Free
Exec SQL SELECT MAX(RULENO)INTO :MAXRUL FROM RULESTABLE;
Exec SQL DECLARE RULCRS CURSOR FOR SELECT * FROM RULESTABLE;
Exec SQL OPEN RULCRS;
Exec SQL FETCH RULCRS INTO :RULEDS;
DoW (Sqlcod = 0 AND RULINDEX <= MAXRUL);
Exec SQL SELECT MAX(SEQNO) INTO :MAXSEQ FROM RULESTABLE
WHERE RULENO=:RULINDEX ;
DoW (SEQINDEX <= MAXSEQ);
If (Position <> '');
Field = 'SUBSTR('+%Trim(Field)+','+%Trim(Position)+','
+'1'+')';
EndIf;
WhereStmt = %Trim(WhereStmt) + ' ' + %Trim(field)+ ' ' +
%Trim(condition) + ' ' + APOS + %Trim(Value) + APOS;
If (SeqIndex < MaxSeq);
WhereStmt = %Trim(WhereStmt) + ' AND ';
EndIf;
Exec SQL FETCH NEXT FROM RULCRS INTO :RULEDS;
SeqIndex = SeqIndex + 1;
EndDo;
FullSqlStmt = %Trim('INSERT INTO ITMRVAT SELECT * +
FROM ITMRVA WHERE '+ %Trim(WhereStmt));
Exec SQL Prepare InsertStmt from :FullSqlStmt;
Exec SQL EXECUTE InsertStmt;
RulIndex = RulIndex + 1;
EndDo;
이것은 SQL 문을 생성합니다
업데이트
: Danny117에서 지능형 조언을 바탕으로
, 나는 아래의 코드로 올라와있다 내가 원하는거야. 이제 코드의 다른 부분을 살펴 보겠습니다.
> EVAL FullSqlStmt
FULLSQLSTMT =
....5...10...15...20...25...30...35...40...45...50...55...60
1 'INSERT INTO ITMRVAT SELECT * FROM ITMRVA WHERE STID = 'PLD' '
61 'AND ENGNO LIKE '%415015%' AND SUBSTR(ENGNO,1,1) = 'R' AND SU'
121 'BSTR(ENGNO,5,1) = 'Y' '
181 ' '
241 ' '
301 ' '
361 ' '
421 ' '
481 ' '
하지만 어떻게 두 번째 테이블을 포함하는 새 규칙이 지정된 경우 처리하는 대니, 내 의견에 언급 된 문제는 지금 ..
동적으로 의미 : 스크립팅을 사용하여 [tag : c]와 같은 프로그래밍 언어 사용. – LPs
Embedded SQLRPG 프로그램을 작성하려고합니다. RPG는 IBM i 플랫폼에서 사용되는 주요 언어입니다. 하지만 의심의 여지가 DB2에 관한 것이므로이 점은 중요하지 않다고 생각합니다. –
규칙에서 언급 된 두 번째 테이블을 처리하는 방법을 말할 수 없습니다. 두 번째 테이블을 참조 할 때 결과를 포함하는 예제를 보여 주면 명확해질 수 있습니다. – user2338816