Oracle SQL을 사용하는 스키마에서 개인 데이터를 혼란스럽게 할 SQL Developer에서 SQL 스크립트를 개발 중입니다. 이 스크립트는 "OBFUS_TABLE"이라는 테이블을 조사합니다.이 테이블에는 난독 화가 필요한 테이블과 열의 목록이 들어 있습니다. 그런 다음 테이블을 반복하면서 데이터를 변경합니다.동일한 SQL 스크립트에서 테이블 작성 및 읽기
실제 루프 및 난독 처리 프로세스를 테스트했으며 잘 작동합니다. 스크립트 시작 부분을 루프 바로 앞까지 테스트 했으므로 OBFUS_TABLE이 만들어지고 값이 삽입됩니다. 이 문제는 루프를 실행하려고 할 때 "테이블 또는 뷰가 존재하지 않습니다"라는 오류로 실패 할 때 두 개를 함께 시도 할 때 발생합니다. 아래의 코드 스 니펫 :
alter session set current_schema = SYSTEM;
DECLARE
t_count NUMBER;
t_count2 NUMBER;
p_tname VARCHAR2(100);
p_cname VARCHAR2(100);
l_datatype VARCHAR2(100);
BEGIN
SELECT COUNT(*) INTO t_count FROM all_tables WHERE table_name = 'OBFUS_TABLE';
SELECT COUNT(*) INTO t_count2 FROM all_tables WHERE table_name = 'OBFUS_LOG';
IF (t_count = 0)
THEN
EXECUTE immediate 'create table OBFUS_TABLE(TABLENAME VARCHAR2(200 BYTE), COLUMNNAME VARCHAR2(200 BYTE), DATA_TYPE VARCHAR2(20 BYTE), ACTIVE VARCHAR(1 BYTE) )';
END IF;
IF (t_count2 = 0)
THEN
EXECUTE immediate 'CREATE TABLE OBFUS_LOG (SRC_TABLENAME VARCHAR2(50 BYTE), SRC_TABLE_ROW_COUNT NUMBER, COPY_TABLENAME VARCHAR2(50 BYTE), COPY_TABLE_ROW_COUNT NUMBER, UPDATE_DATE TIMESTAMP(6))';
END IF;
EXECUTE immediate 'INSERT INTO OBFUS_TABLE VALUES (''OB_MYTABLE1'',''SRNM'',''NAME'',''Y'')';
COMMIT;
FOR x IN (SELECT TABLENAME, COLUMNNAME, DATA_TYPE FROM OBFUS_TABLE WHERE ACTIVE='Y')
LOOP
p_tname := upper(x.TABLENAME); -- Table name
p_cname := upper(x.COLUMNNAME); -- Column name
l_datatype := upper(x.DATA_TYPE);
dbms_output.put_line('Started: '||TO_CHAR(sysdate,'YYYY/MM/DD HH24:MI:SS'));
END LOOP;
END;
NB : 실제로 위의 것과 동일한 형식으로 약 30 개의 삽입 문이 있습니다. 나는 그들이이 게시물을 너무 많이 덧댄 것이기 때문에 그것들을 제거했다. 그러나 나는 모든 insert 문을 수동으로 검사했고 모두 정확하다.
SQL Developer가 실행되기 전에 코드에서 "온 전성 검사"를 수행하고 루프를 앞당기 고 OBFUS_TABLE이 존재하지 않는다는 것을 인식하지만 해당 코드 조각을 이해하지 못한다고 가정합니다 OBFUS_TABLE이 확실히 존재합니다.
이 문제를 해결할 방법이 있습니까? 나는 GOTO 성명서가 도움이 될지도 모른다고 생각했지만 행운은 없었습니다. 나는 두 개의 분리 된 스크립트가 아닌 하나의 스크립트로 솔루션을 유지하려고합니다. 그러나이 방법을 사용하는 것이 유일한 방법이라면 제가 가정 할 수 있습니다. 어떤 도움이라도 대단히 감사 할 것입니다.
아! 답변 해 주셔서 감사합니다. 나는 여전히 SQL에 대해 익숙하지 않기 때문에 동적 SQL에 대해 들어 본 적이 없지만 약간의 연구를 수행 할 것입니다. 루프의 코드가 내가 여기서하려고하는 것과 정확히 똑같습니다 : 테이블을 찾고, 필요하다면 그것을 만들고, 읽고 쓰고, 저에게 전혀 문제가 없었습니다. . 코드가 루프에서 구조화되는 방식이어야합니다. 신경 쓰지 마! – Neoptolemus
그래, 좋은 잠자리를 가졌지 만 코드를 작동시킬 수 없어 온라인에서 본 사이트는 조금 더 경험이 많고 코드가 당신과 매우 다른 것처럼 보입니다. 루프가 어떻게 생겼는지 보여 줄 수 있습니까? 코드의 첫 번째 부분에서 무엇을하는지 이해할 수 있지만 rc의 데이터를 루프에 전달하는 데 문제가 있습니다. – Neoptolemus
@Neoptolemus : done –