다음 조건에 대한 if|else 문을 작성하는 것이 어렵다는 것을 알았습니다. 내가 하고 있는 일은 다음 쿼리를 실행하는 Oracle 데이터베이스가 있고 행의 출력을 반환하는 것입니다(레코드를 표시하거나 NULL 값을 반환할 수 있음). 내가 원하는 것은 행이 반환되는 경우입니다. 출력으로 여러 명령을 실행해야 하며, 반환된 줄이 없으면 두 번째 명령 집합을 실행해야 합니다.
예제 1 - 출력을 보여줍니다.
SQL> select value from v$parameter where name='spfile';
VALUE
---------------
+DATA_01/TESTDB/spfileTESTDB.ora
예 2 - 경우에 따라 행을 반환할 수 없습니다.
SQL> select value from v$parameter where name='spfile';
VALUE
--------------
답변1
다음과 같이 하고 싶을 수도 있습니다:
db_connect="user/pass@db"
output=$(
sqlplus -s "$db_connect" <<'END' | sed '/^$/d'
set heading off
select value from v$parameter where name='spfile';
END
)
이 -s
옵션과 set heading off
sqlplus 명령은 불필요한 출력을 최소화하도록 설계되었습니다. sed '/^$/d'
빈 줄을 삭제하는 것입니다. 결과는 $output
빈 문자열(빈 결과의 경우)이거나 쿼리 출력 행이어야 합니다.
heredoc 종결자 에는 END
줄에 다른 문자가 있어서는 안 됩니다. 그렇기 때문에 다른 줄처럼 들여쓰기되지 않습니다.
그러면 다음과 같이 할 수 있습니다:
if [[ -n "$output" ]]; then
stuff if there is output
else
stuff if there is null output
fi