Quero escrever código reutilizável e preciso declarar algumas variáveis no início e reutilizá-las no script, como:
DEFINE stupidvar = 'stupidvarcontent';
SELECT stupiddata
FROM stupidtable
WHERE stupidcolumn = &stupidvar;
Como posso declarar uma variável e reutilizá-la em instruções a seguir, como em usá-la SQLDeveloper.
Tentativas
- Use uma seção DECLARE e insira a seguinte instrução SELECT em
BEGIN
eEND;
. Acessa a variável usando&stupidvar
. - Use a palavra-chave
DEFINE
e acesse a variável - Usando a palavra-chave
VARIABLE
e acesse a variável
Mas estou recebendo todos os tipos de erros durante minhas tentativas (variável não vinculada, erro de sintaxe, esperado SELECT INTO
...).
sql
oracle
variables
declaration
bl4ckb0l7
fonte
fonte
Respostas:
Existem várias maneiras de declarar variáveis nos scripts SQL * Plus.
O primeiro é usar VAR, para declarar uma variável de ligação. O mecanismo para atribuir valores a um VAR é com uma chamada EXEC:
Um VAR é particularmente útil quando queremos chamar um procedimento armazenado que possua parâmetros ou função OUT.
Como alternativa, podemos usar variáveis de substituição. Estes são bons para o modo interativo:
Quando estamos escrevendo um script que chama outros scripts, pode ser útil DEFINIR as variáveis antecipadamente. Este snippet é executado sem solicitar que eu insira um valor:
Finalmente, há o bloco PL / SQL anônimo. Como você vê, ainda podemos atribuir valores a variáveis declaradas interativamente:
fonte
Tente usar aspas duplas se for uma variável char:
ou
upd:
fonte
ORA-01008: not all variables bound
.DEFINE num = 1; SELECT &num FROM dual;
leva a:ORA-01008: not all variables bound
No PL / SQL v.10
A palavra-chave declare é usada para declarar variável
para atribuir um valor, você pode defini-lo quando declarar
ou para selecionar algo nessa variável, você usa a
INTO
instrução, no entanto, é necessário agrupar a instruçãoBEGIN
eEND
, também, garantir que apenas um valor único seja retornado e não se esqueça de ponto e vírgula.então a declaração completa sairia a seguir:
Sua variável é utilizável apenas dentro de
BEGIN
e,END
portanto, se você quiser usar mais de uma, precisará fazer váriosBEGIN END
invólucrosEspero que isso economize algum tempo
fonte
Se você deseja declarar a data e usá-la no SQL Developer.
fonte
Só quero adicionar a resposta de Matas . Talvez seja óbvio, mas pesquisei por um longo tempo para descobrir que a variável está acessível apenas dentro da construção BEGIN-END ; portanto, se você precisar usá-la em algum código posteriormente, precisará inseri-lo no código BEGIN Bloco -END .
Observe que esses blocos podem ser aninhados :
fonte
A questão está prestes a usar uma variável em um script significa que, para mim, ela será usada no SQL * Plus.
O problema é que você perdeu as aspas e o Oracle não pode analisar o valor em número.
Este exemplo funciona bem devido à conversão automática de tipo (ou como ele é chamado).
Se você verificar digitando DEFINE no SQL * Plus, isso mostrará que a variável num é CHAR.
Não é um problema neste caso, porque o Oracle pode lidar com a análise de sequência de números, se for um número válido.
Quando a sequência não pode analisar o número, o Oracle não pode lidar com ela.
Com uma cotação, portanto, não force o Oracle a analisar o número, tudo bem:
Portanto, para responder à pergunta original, faça o seguinte:
Há uma outra maneira de armazenar variáveis no SQL * Plus usando Valor da Coluna de Consulta .
O COL [UMN] tem new_value opção para armazenar o valor da consulta pelo nome do campo.
Como você pode ver, o valor X.log foi definido na variável stupid_var , para que possamos encontrar um arquivo X.log no diretório atual com algum log.
fonte
Aqui está sua resposta:
fonte
No sapo eu uso este funciona:
Em seguida, o valor será impresso na
DBMS Output
janela.Referência para aqui e aqui2 .
fonte
Às vezes, você precisa usar uma variável de macro sem solicitar ao usuário que insira um valor. Geralmente, isso precisa ser feito com parâmetros de script opcionais. O código a seguir é totalmente funcional
Código semelhante foi encontrado de alguma forma no diretório rdbms / sql.
fonte
Uma abordagem possível, se você precisar especificar um parâmetro apenas uma vez e replicá-lo em vários locais, é fazer algo assim:
Este código gera uma sequência de 8 dígitos aleatórios.
Observe que eu crio um tipo de alias chamado
str_size
que mantém a constante8
. É junção cruzada para ser usada mais de uma vez na consulta.fonte