Quiero escribir código reutilizable y necesito declarar algunas variables al principio y reutilizarlas en el script, como:
DEFINE stupidvar = 'stupidvarcontent';
SELECT stupiddata
FROM stupidtable
WHERE stupidcolumn = &stupidvar;
¿Cómo puedo declarar una variable y reutilizarla en las siguientes afirmaciones, como al usar SQLDeveloper?
Intentos
- Use una sección DECLARE e inserte la siguiente instrucción SELECT en
BEGIN
yEND;
. Acceda a la variable usando&stupidvar
. - Use la palabra clave
DEFINE
y acceda a la variable. - Usando la palabra clave
VARIABLE
y acceda a la variable.
Pero recibo todo tipo de errores durante mis intentos (variable independiente, error de sintaxis, esperado SELECT INTO
...).
sql
oracle
variables
declaration
bl4ckb0l7
fuente
fuente
Respuestas:
Hay varias formas de declarar variables en los scripts SQL * Plus.
El primero es usar VAR, para declarar una variable de enlace. El mecanismo para asignar valores a un VAR es con una llamada EXEC:
Un VAR es particularmente útil cuando queremos llamar a un procedimiento almacenado que tiene parámetros OUT o una función.
Alternativamente, podemos usar variables de sustitución. Estos son buenos para el modo interactivo:
Cuando estamos escribiendo un script que llama a otros scripts, puede ser útil DEFINIR las variables por adelantado. Este fragmento se ejecuta sin pedirme que ingrese un valor:
Finalmente está el bloque anónimo PL / SQL. Como puede ver, aún podemos asignar valores a las variables declaradas de forma interactiva:
fuente
Intente usar comillas dobles si es una variable char:
o
upd:
fuente
ORA-01008: not all variables bound
.DEFINE num = 1; SELECT &num FROM dual;
conduce a:ORA-01008: not all variables bound
En PL / SQL v.10
la palabra clave declare se usa para declarar variable
para asignar un valor, puede establecerlo cuando declara
o para seleccionar algo en esa variable, usa la
INTO
declaración, sin embargo, necesita ajustar la declaraciónBEGIN
yEND
, también, debe asegurarse de que solo se devuelva un solo valor, y no olvide el punto y coma.entonces la declaración completa saldría a continuación:
La variable sólo es utilizable dentro
BEGIN
yEND
por lo que si desea utilizar más de uno le va a tener que hacer múltiplesBEGIN END
envoltoriosEspero que esto te ahorre algo de tiempo
fuente
Si desea declarar la fecha y luego usarla en SQL Developer.
fuente
Solo quiero agregar la respuesta de Matas . Tal vez sea obvio, pero he buscado durante mucho tiempo descubrir que la variable es accesible solo dentro de la construcción BEGIN-END , por lo que si necesita usarla en algún código más adelante, debe poner este código dentro de BEGIN -END bloque .
Tenga en cuenta que estos bloques se pueden anidar :
fuente
La pregunta está a punto de usar una variable en un script significa para mí que se usará en SQL * Plus.
El problema es que perdió las comillas y Oracle no puede analizar el valor en número.
Esta muestra funciona bien debido a la conversión automática de tipo (o como se llame).
Si marca escribiendo DEFINE en SQL * Plus, mostrará que la variable num es CHAR.
No es un problema en este caso, porque Oracle puede manejar el análisis de cadenas a números si fuera un número válido.
Cuando la cadena no puede analizarse en número, Oracle no puede lidiar con ella.
Con una cita, así que no obligue a Oracle a analizar el número, estará bien:
Entonces, para responder la pregunta original, debería ser como esta muestra:
Hay otra forma de almacenar variables en SQL * Plus utilizando el valor de la columna de consulta .
El COL [UMN] tiene nuevo_valor opción para almacenar el valor de la consulta por el nombre del campo.
Como puede ver, el valor X.log se configuró en la variable stupid_var , por lo que podemos encontrar que un archivo X.log en el directorio actual tiene algún registro.
fuente
Aquí está tu respuesta:
fuente
En Toad utilizo estos trabajos:
Entonces el valor se imprimirá en la
DBMS Output
ventana.Referencia aquí y aquí 2 .
fuente
A veces necesita usar una macro variable sin pedirle al usuario que ingrese un valor. En la mayoría de los casos, esto debe hacerse con parámetros de script opcionales. El siguiente código es completamente funcional.
Código similar se encontró de alguna manera en el directorio rdbms / sql.
fuente
Un enfoque posible, si solo necesita especificar un parámetro una vez y replicarlo en varios lugares, es hacer algo como esto:
Este código genera una cadena de 8 dígitos aleatorios.
Tenga en cuenta que creo un tipo de alias llamado
str_size
que contiene la constante8
. Se cruza para usarse más de una vez en la consulta.fuente