Se você puder colocar esta seção de controle em seu próprio script, por exemplo,
elcm_ctl.sql
, você poderia fazer isso:accept run_it char format a1 prompt "Run the script?"
set termout off
whenever sqlerror exit success rollback
exec if upper(nvl('&run_it', 'N')) != 'Y' then raise no_data_needed; end if;
whenever sqlerror continue
spool c:\elcm.sql
select 'select sysdate from dual;' from dual;
spool off
set termout on
spool c:\elcm_details.spl
@c:\elcm.sql
spool off
O
accept
comando
é um pouco mais limpo do que confiar em prompts de substituição, na minha opinião, e é um pouco auto-documentado. Isso solicita ao usuário a string especificada, em vez de apenas 'gen'
. (No SQL*Plus, você pode estender isso e forçar o usuário a inserir um único caractere, solicitando novamente se ele inserir algo mais; e o padrão para 'N' se ele apenas pressionar return sem inserir nada. Mas o SQL Developer suporta apenas um subconjunto da funcionalidade). Em seguida, um pequeno bloco anônimo lança uma exceção - realmente não importa qual - se o valor da variável inserida não for
'y'
ou 'Y'
. Enquanto isso, eu set termout off
para que você não veja a exceção real. E eu usei whenever sqlerror
para fazer o script sair quando essa exceção for levantada, então o que vier depois não será executado. Isso é todo o resto no script de controle, não apenas a próxima consulta, mas você pode ter vários subscripts se precisar ser mais flexível. Mas no SQL Developer,
termout
só funciona como esperado quando você executa via @
. Se você executar o conteúdo de elcm_ctl.sql
diretamente da planilha SQL, você verá a exceção sendo levantada, o que é um pouco feio. Então, em vez disso, salve esse script de controle e, em uma planilha vazia, faça:@c:\elcm_ctl.sql
Execute essa planilha como um script e ela irá avisá-lo; se você digitar
'Y'
você verá a saída do script na janela de saída do script (a menos que você deixe set termout off
no script de controle) e ele criará o arquivo de spool. Se você digitar qualquer outra coisa, ele não executará o elcm.sql
arquivo, não mostrará nada na janela de saída do script e não criará um arquivo de spool.