2012-08-02 2 views
1

sql 테이블에서 select count를 가진 sql 파일을 실행하고 ant의 sqlplus를 사용하여 변수에 저장하려고합니다.sqlplus resultproperty

ora:sqlplus dir="${basedir}" start="${sql_count_table_name}.sql" silent="true" 
    logon="${sql_username}/${sql_password}@${sql_database}" 
    failonerror="false" resultproperty="tablecount"> 
</ora:sqlplus 

그러나 테이블 수는 변수 tablecount에 할당되지 않습니다.

답변

1

this에 따르면, resultProperty이다 : 그것은에서 종료 코드를 얻을 수 있도록 명령의 리턴 코드가 ... 이

를 저장해야하는 속성의

이름 SQL * Plus, 쿼리 한 값이 아닙니다. 스크립트에 여러 개의 쿼리 또는 여러 개의 열이 포함 된 쿼리가있는 경우이 쿼리를 설정할 때 어떤 것이 좋을까요?

당신은 아마도 대체 변수 생성하기 위해 SQL * Plus를 COLUMN 명령의 NEW_VALUE 구문을 사용하여,이를 달성하기 종료 상태를 파괴 수 :

column table_count new_value my_exit_code 
select count(*) as table_count from ... 
exit &my_exit_code 

을 ...하지만 당신은을 감지 할 수있는 능력을 잃을 것 진짜 오류.


편집 : 나는 종료 코드가 제한되는 것을 잊었다; the SQL*Plus documentation에서 :

운영 체제 리턴 코드의 범위는 일부 운영 체제에서 제한됩니다. 이는 EXIT n 및 EXIT 변수의 플랫폼 간 이동성을 제한합니다. 예를 들어 UNIX의 경우 리턴 코드에 대해 하나의 바이트의 저장 영역 만 있습니다. 당신은 항상 정말 작은 수를 기대하지 않는 한, 따라서 반환 코드에 대한 범위가 그래서 255

제로에 제한이 작동하지 않습니다, 그것은 가치를 MOD 것 같은 당신은 할 수 없습니다 의미가있는 0/0이 아닌 것에 의존 할 수도 있습니다.

실제로 카운트에 신경 쓸 필요는 없습니다. 당신은 당신이 뭔가 할 수있는 경우에 무언가의 존재를 테스트 할 수있다 : 행이없는 경우 0의 종료 코드를 줄 것이다

select least(count(*), 1) as table_count from ... 

을 ..., 1의 경우가 어느 .