IF | Condição ELSE para verificar se a saída da consulta do banco de dados Oracle mostra algum resultado ou NULL

0

Eu estou achando difícil escrever uma declaração if | else para a condição abaixo. O que estou fazendo é que eu tenho um banco de dados Oracle onde estou executando a consulta abaixo e retorna saída em linhas (pode mostrar registros ou pode retornar valores NULL), o que eu quero é se a linha retornou como saída, então ele deve executar Alguns comandos e, se nenhuma linha for retornada, deverá executar o segundo conjunto de comandos.

Exemplo 1 - mostra a saída.

SQL> select value from v$parameter where name='spfile';
VALUE
---------------
+DATA_01/TESTDB/spfileTESTDB.ora

Exemplo 2 - Em alguns casos, não pode retornar nenhuma linha.

SQL> select value from v$parameter where name='spfile';
VALUE
--------------
    
por Mohammeddba 24.05.2018 / 18:17

1 resposta

1

Você pode querer fazer algo assim:

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
)

As opções -s e set heading off sqlplus são destinadas a minimizar a saída irrelevante. sed '/^$/d' é excluir linhas vazias. O resultado em $output deve ser uma sequência vazia (para resultado nulo) ou a (s) linha (s) da saída da consulta.

Observe que o terminador END heredoc não deve ter nenhum outro caractere nessa linha. É por isso que não é recuado como as outras linhas.

Então você pode fazer:

if [[ -n "$output" ]]; then
    stuff if there is output
else
    stuff if there is null output
fi
    
por 28.05.2018 / 19:21