oracle 데이터베이스의 temp_table 테이블에 100 개의 DMLS가 있습니다. 해당 테이블 seq_no, DMLS, Status에는 세 개의 열이 있습니다. 아래 표는 아래와 같습니다. 데이터베이스의 테이블에서 dmls를 실행하는 방법은 무엇입니까?
NULL이 NULL SEQNO, dmls, 상태
1, ...에 삽입, 업데이트, 테이블 ......
.
100
, 삭제 테이블 ...,NULL은 내가 SEQNO에 따라 행함으로써 테이블 행을 읽고 데이터베이스에 해당 행에 DML을 실행하고 싶습니다. 성공적으로 실행 된 후이 테이블의 상태 열은 완료로 업데이트되어야합니다. DML이 실행에 실패하면 FAILED로 업데이트되고 다음 행을 처리하지 않고 중지됩니다. 나는 아래의 절차를 썼지 만 그것은 필요하지 않았다. 아무도 내가 여기에없는 것을 말해 줄 수 있습니까?
CREATE or REPLACE PROCEDURE DML_PROC is
CURSOR dml_cur is SELECT SEQ_NO,DMLS,STATUS FROM DMLS_TBL where STATUS=NULL order by SEQ_NO;
BEGIN
FOR I IN dml_cur
LOOP
EXECUTE IMMEDIATE 'I.DMLS';
UPDATE DMLS_TBL SET STATUS='SUCCESS'
WHERE SEQ_NO=I.SEQ_NO;
END LOOP;
COMMIT;
EXCEPTION
WHEN OTHERS THEN NULL;
END DML_PROC;
답장을 보내 주셔서 감사합니다. 나는 변화를 만들어 냈고 효과가 있었다. 하지만 테이블이 status = failure로 업데이트 될 때 프로 시저를 실행할 때 문이 실패했습니다. DMLS_TBL 테이블의 동일한 명령문을 복사하여 편집기에 붙여 넣으면 성공적으로 실행됩니다. 삽입 문에서 구문 오류가 있는지 확인했지만 찾지 못했습니다. 내가 무엇을 놓치고 있는지 확실하지 않다. – Sean
마지막 문장의 세미콜론은 무엇입니까? –
@Sean DBMS_OUTPUT.PUT_LINE (I.DMLS || '오류 :'|| SQLERRM);을 내부 예외 블록에 추가하면 실패한 이유가 표시됩니다! –