Como posso ignorar ampersands em um script SQL em execução a partir do SQL Plus?
Pergunta
Eu tenho um script SQL que cria um pacote com um comentário que contém um e comercial (&). Quando eu executar o script de SQL Plus, sou solicitado a inserir um valor substituto para a seqüência começando com &. Como faço para desativar esse recurso para que SQL Plus ignora o comercial?
Solução
Isso pode funcionar para você:
set define off
Caso contrário, as necessidades e comercial para estar na extremidade de uma corda,
'StackOverflow &' || ' you'
EDIT: Eu estava clique feliz ao salvar ... Isto foi referenciado a partir de um blogue .
Outras dicas
Se você às vezes usam variáveis ??de substituição que você pode não querer transformar definir off. Nestes casos, você pode converter o comercial de seu equivalente numérico como em || Chr(38) ||
ou anexá-lo como um único caractere como em || '&' ||
.
Eu resolvidos com o código abaixo:
set escape on
e colocar um \ ao lado e na 'value_\&_intert'
esquerda
Att
Você pode definir o carácter especial, que é procurado após a execução de um script, para outro valor por meio do uso da SET DEFINE <1_CHARACTER>
Por padrão, a definir-se a função está ligada, e é definido como &
Ele pode ser desligado - como já foi dito - mas pode ser evitado também por meio de defini-lo como um valor diferente. Estar muito consciente do que sinal você configurá-lo para. No exemplo abaixo, eu tenho escolheu o caractere #, mas que a escolha é apenas um exemplo.
SQL> select '&var_ampersand #var_hash' from dual;
Enter value for var_ampersand: a value
'AVALUE#VAR_HASH'
-----------------
a value #var_hash
SQL> set define #
SQL> r
1* select '&var_ampersand #var_hash' from dual
Enter value for var_hash: another value
'&VAR_AMPERSANDANOTHERVALUE'
----------------------------
&var_ampersand another value
SQL>
set definir off <- Esta é a melhor solução que eu encontrei
Eu também tentei ...
set definir}
Eu era capaz de inserir vários registros que contêm caracteres e comercial 'e' mas eu não posso usar o caractere '}' no texto Então eu decidi usar "set definir off" e tudo funciona como deveria.
De acordo com a este simpático FAQ há um par soluções.
Você também pode ser capaz de escapar e comercial com a \
barra invertida se você pode modificar o comentário.
Eu tive uma instrução CASE com QUANDO coluna = 'sometext e mais texto' ENTÃO ....
Eu substituí-lo com QUANDO coluna = 'sometext' || CHR (38) || 'Mais texto' ENTÃO ...
Você também pode usar QUANDO coluna LIKE 'sometext _ mais texto' ENTÃO ...
(_ é o curinga para um único caractere)