Como faço para ignorar o e comercial em um script SQL em execução no SQL Plus?

104

Eu tenho um script SQL que cria um pacote com um comentário contendo um E comercial (&). Quando executo o script do SQL Plus, sou solicitado a inserir um valor substituto para a string que começa com &. Como desativo esse recurso para que o SQL Plus ignore o "e" comercial?

JoshL
fonte

Respostas:

181

Isso pode funcionar para você:

set define off

Caso contrário, o e comercial precisa estar no final de uma string,

'StackOverflow &' || ' you'

EDIT: Fiquei feliz com o clique ao salvar ... Isso foi mencionado em um blog .

Austin Salonen
fonte
2
Você também pode especificar isso no arquivo de configuração de perfil do site glogin.sql ou no arquivo de configuração de perfil de usuário login.sql
David Aldridge
Esta é a solução mais simples se você não estiver interessado em variáveis ​​de substituição.
Drumbeg 01 de
Sempre uma solução para salvar vidas :) Obrigado.
Anjana Silva
25

Se você às vezes usa variáveis ​​de substituição, pode não querer desligar a definição. Nesses casos, você pode converter o e comercial de seu equivalente numérico como em || Chr(38) ||ou anexá-lo como um único caractere como em || '&' ||.

Leigh Riffel
fonte
O cenário específico é um pacote cuja fonte inclui um e comercial em um comentário. Não vejo como eu usaria concatenação ou substituição para isso.
JoshL
JoshL, você está correto. Eu apenas listei isso para completar. Ele está relacionado à sua pergunta, embora não responda diretamente à sua pergunta específica.
Leigh Riffel
Isso realmente me ajudou.
Archimedes Trajano
13

Resolvi com o código abaixo:

set escape on

e coloque um \ ao lado de & à esquerda 'value_\&_intert'

Att

Cauca
fonte
Isso funcionou para mim. Eu estava usando o comando, comment on column tablename.columnname is 'war ' || chr(38) || ' peace'mas ele estava me dando o erro ORA-01780: string literal required.
Mrswadge
6

Você pode definir o caractere especial, que é procurado na execução de um script, para outro valor por meio do uso do SET DEFINE <1_CHARACTER>

Por padrão, a própria função DEFINE está ativada e configurada como &

Ele pode ser desativado - como já mencionado - mas também pode ser evitado configurando-o para um valor diferente. Esteja bem ciente de qual sinal você definiu. No exemplo abaixo, escolhi o caractere #, mas essa 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>
tvCa
fonte
1
Eu mesmo usei essa abordagem recentemente. Gosto disso porque não exige que eu altere o conteúdo dos meus pacotes PL / SQL.
Drumbeg
3

set define off <- Esta é a melhor solução que encontrei

Eu também tentei ...

definir definir}

Consegui inserir vários registros contendo os caracteres e comercial '&', mas não consigo usar o caractere '}' no texto. Portanto, decidi usar "set define off" e tudo funciona como deveria.

ora
fonte
2

De acordo com este bom FAQ, existem algumas soluções.

Você também pode conseguir escapar do "e" comercial com o caractere de barra invertida, \se puder modificar o comentário.

user19387
fonte
2
O escape de barra invertida não funciona no SQL * Plus ou SQLDeveloper
Jim Tough
2
@JimTough Faz depois de ativá-lo comset escape on
David Balažic
0

Eu tinha uma instrução CASE com a coluna WHEN = 'algo e mais texto' ENTÃO ...

Substituí-o por WHEN coluna = 'algo' || CHR (38) || 'mais texto' ENTÃO ...

você também pode usar a coluna WHEN LIKE 'something _ more text' THEN ...

(_ é o curinga para um único caractere)

AWOLKiwi
fonte