IF | ELSE 조건은 Oracle 데이터베이스 쿼리 출력에 결과가 표시되는지 또는 NULL이 표시되는지 확인합니다.

IF | ELSE 조건은 Oracle 데이터베이스 쿼리 출력에 결과가 표시되는지 또는 NULL이 표시되는지 확인합니다.

다음 조건에 대한 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 offsqlplus 명령은 불필요한 출력을 최소화하도록 설계되었습니다. sed '/^$/d'빈 줄을 삭제하는 것입니다. 결과는 $output빈 문자열(빈 결과의 경우)이거나 쿼리 출력 행이어야 합니다.

heredoc 종결자 에는 END줄에 다른 문자가 있어서는 안 됩니다. 그렇기 때문에 다른 줄처럼 들여쓰기되지 않습니다.

그러면 다음과 같이 할 수 있습니다:

if [[ -n "$output" ]]; then
    stuff if there is output
else
    stuff if there is null output
fi

관련 정보