2016-11-16 4 views
0

SQL 및 PL/SQL 프로 시저를 실행하는 Ant 스크립트가 있습니다.PL/SQL 프로 시저 실행을위한 Ant exec 실행 실패

BEGIN 
    -- drop functions 
    FOR R IN (
     SELECT owner, object_name 
     FROM all_objects 
     WHERE owner='FCPOTP' 
     AND OBJECT_TYPE IN ('FUNCTION')) 
    LOOP 
     EXECUTE IMMEDIATE 'drop function '||R.owner||'.'||R.object_name; 
    END LOOP; 
    -- drop procedure 
    FOR R IN (
     SELECT owner, object_name 
     FROM all_objects 
     WHERE owner='FCPOTP' 
     AND OBJECT_TYPE IN ('PROCEDURE')) 
    LOOP 
     EXECUTE IMMEDIATE 'drop procedure '||R.owner||'.'||R.object_name; 
    END LOOP;  
END; 

가 어떻게이 모든 것을 실행에 대해 동일한 exec sqlplus 실행 파일을 사용할 수 있습니다

<exec executable="sqlplus" failonerror="true" >   
    <arg value="${user}/${password}@${DB}" /> 
    <arg value="@${scriptFilename}" /> 
</exec> 

위의 코드는 SQL 스크립트와 패키지,하지만 같은 절차를 실행?

+0

어떻게이 '실패'않는다 - 당신이 어떤 오류를받을 수 있나요? 그것이 프로 시저 또는 익명 블록의 일부입니다. SQL \ * Plus를 통해 수동으로 실행하는 경우에는 어떻게됩니까? –

+0

@AlexPoole - 오류 메시지가 표시되지 않습니다. 그러나 블록은 실행되지 않습니다. 그것은 단순히 말한다에 연결 [임원] : [임원] 오라클 데이터베이스 11g 엔터프라이즈 에디션 출시 11.2.0.4.0 - 분할 옵션을 64 비트 생산 [임원] [임원] [임원] 오라클 데이터베이스 11g는 기업에서 끊김 (36) 에디션 릴리즈 11.2.0.4.0 - 64 비트 생산 [exec] 파티션 옵션 사용 [echo] ===== End ===== [echo] – useranon

+0

결과물을 다음과 같이 표시하는 것이 좋습니다. 제대로 형식을 지정할 수 있습니다. 그러나 나는 그것의 요지를 얻는다. –

답변

2

오류가 발생하지 않으며 주석의 출력에서 ​​실행중인 블록이 표시되지 않습니다. 그것은 그렇지 않기 때문입니다. From the documentation :

SQL * Plus는 입력 한 서브 프로그램을 SQL 버퍼에 저장합니다. 현재 서브 프로그램을 실행 또는 슬래시 (/) 명령으로 실행하십시오. 세미콜론 (;)은 PL/SQL 서브 프로그램의 일부로 취급되며 명령을 실행하지 않습니다.

현재 익명 블록 (서브 프로그램)이 'SQL 버퍼'에 입력되어 있지만 실행되지 않습니다.

당신은 당신의 익명 블록 후, 스크립트 파일에 /를 추가 할 필요가

:

... 
    LOOP 
     EXECUTE IMMEDIATE 'drop procedure '||R.owner||'.'||R.object_name; 
    END LOOP;  
END; 
/
+0

추가 한 후에/the 프로 시저가 성공적으로 실행됩니다. 고맙습니다. – useranon