2017-05-18 3 views
1

팀에서 사용하는 복제해야하는 원격 데이터베이스가 있습니다. 필자는 리모컨에서 all_sequences 테이블에 대한 액세스를 제공하는 데이터베이스 링크와 동의어를 만들었습니다.ORACLE 10g : 원격 데이터베이스에서 시퀀스 재설정

create synonym rprod_all_sequences for [email protected]_production; 

이제 모든 사용자 시퀀스를 가져와 올바른 번호로 시작하도록 변경하는 SQL 파일을 만들었습니다.

set serveroutput on 
/******************************************************************************/ 
/* RESET ALL SEQUENCE NUMBERS             */ 
/******************************************************************************/ 

declare 
cursor c_cursor is 
    select sequence_owner||'.'||sequence_name AS name, TO_CHAR(last_number + 1) AS last_number 
    from rprod_all_sequences 
    where sequence_owner not in ('WMSYS','XDB','SYS','SYSTEM','SYSMAN','MDSYS','LBACSYS','EXFSYS','DMSYS','DBSNMP','CTXSYS'); 

begin 
for r_record in c_cursor loop 
    execute immediate 'alter sequence ' || r_record.name || ' ' ||' INCREMENT BY '|| r_record.last_number ||';'; 
    end loop; 

end; 
/
exit; 

는하지만, 난 항상이 오류 받고 있어요 :

[email protected]> @reset_seq.sql 
declare 
* 
ERROR at line 1: 
ORA-00911: invalid character 
ORA-06512: at line 7 

I 별도로 시도로 스크립트에 대해 불평하는 이유를 잘 모르겠어요를하며 노력하고 있습니다. 미안하지만 멍청한 질문 일 수도 있습니다. 왜 어떤 아이디어?

감사합니다.

답변

1

실행 즉시 선언문 끝에 ;이 추가로 있습니다. 이 시도 : 난이 오류가

DECLARE 
    CURSOR c_cursor 
    IS 
     SELECT sequence_owner || '.' || sequence_name AS name, 
      TO_CHAR (last_number + 1) AS last_number 
     FROM rprod_all_sequences 
     WHERE sequence_owner NOT IN ('WMSYS', 
            'XDB', 
            'SYS', 
            'SYSTEM', 
            'SYSMAN', 
            'MDSYS', 
            'LBACSYS', 
            'EXFSYS', 
            'DMSYS', 
            'DBSNMP', 
            'CTXSYS'); 
BEGIN 
    FOR r_record IN c_cursor 
    LOOP 
     EXECUTE IMMEDIATE 
      'alter sequence ' 
     || r_record.name 
     || ' ' 
     || ' INCREMENT BY ' 
     || r_record.last_number 
      ; 
    END LOOP; 
END; 
/
+0

을 ->'라인 1에 오류를 선언 : ORA-02289은 : 순서는 ORA-06512 존재하지 않습니다 줄에서이 명령이 올바른 그러나 '생략 것 같다 21'; ' 마지막에 명령의 전체 루프를 1로 만듭니다. dbms_ouput.put_line을 사용하여 즉시 실행을 출력하고 작동하는 스크립트 1을 테스트합니다 –

+0

루프에서이 작업을 실행하고 있습니다. 그래서 한 문장 만 실행됩니다. 당신이'dbms_output.put_line'을 통해 그것을 인쇄하려고 시도한 것과는 다릅니다. squence가 있는지 확인하십시오. 일부 시퀀스가 ​​생성되지 않았거나 이미 삭제되었을 수 있습니다. 실제 문제를 찾아내는 예외 블록을 작성하십시오. – XING