2009-12-22 30 views
6

Tengo una secuencia de comandos SQL que se ejecuta en TOAD. Actualmente lo tengo establecido con solo declaración después de la declaración, así:variables en las secuencias de comandos TOAD

select such-and-such from somewhere; 

delete other-thing from somewhere-else; 

Y así sucesivamente. Algunas de las cláusulas where terminan siendo repetitivas porque tengo consultas internas complejas para que funcionen ID particulares. Me gustaría capturar el ID al comienzo del guión en una variable y luego usar esa variable en las siguientes cláusulas where. Así que algo como esto:

variable MY_ID = select the-ID from somewhere; 

select such-and-such from somewhere where ID = @MY_ID; 

Obviamente estoy inventando esa sintaxis, pero esa es la funcionalidad que estoy buscando. Pero no estoy seguro si eso es posible en un script TOAD. Sé que puedo convertir todo en un bloque PL/SQL pero estoy tratando de evitar tener que hacer eso por varias razones.

¿Alguna forma de hacerlo usando TOAD sin convertir a PL/SQL?

Gracias,

~ Justin

+0

No puedo ofrecer una respuesta, ya que no estoy familiarizado con TOAD, pero ¿cuáles son sus motivos para no usar PLSQL? –

+0

Existen varias razones para no cambiar a PL/SQL. Una es que ya está al 90% y no tengo ganas de invertir el tiempo para cambiar. Dos es que las secuencias de comandos PL/SQL son más difíciles de depurar de mi experiencia y también son más difíciles de "pasar" una declaración a la vez. Esto podría ser una falta de conocimiento de mi parte ya que no soy experto en PL/SQL. Tercero, le estoy entregando este script a otros y, nuevamente, desde mi experiencia, los scripts SQL "simples" son más fáciles de manejar que PL/SQL. – RationalGeek

Respuesta

9

Creo que esto logrará lo que desea. Puede declarar una variable de vinculación, insertar un valor en ella y luego usarla en declaraciones futuras.

variable l_var varchar2(1); 

begin 
    select dummy 
    into :l_var 
    from dual; 
end; 

select * 
    from dual 
where dummy = :l_var; 
0

utilizo ya no activa SAPO, pero debe haber algún mecanismo para establecer valores para unen parámetros, es decir, select such-and-such from somewhere where ID = :myid; de tal manera que cada vez que se produce SAPO suministra el mismo valor para ese parámetro.

Como alternativa, puede crear un valor de contexto de sesión o una variable de paquete PL/SQL (nota: no es lo mismo que reescribir todo el código para usar PL/SQL). Ver this question

+0

Sé a qué se refiere con las variables de vinculación. Sin embargo, quiero capturar el valor de una declaración de selección diferente. La variable tiene potencialmente un valor diferente cada vez que ejecuto el script. – RationalGeek

+0

Así que simplemente configúrelo de manera diferente al principio cada vez que lo ejecute.Si sigue la ruta del paquete (tomando el ejemplo de Thomas Jones-Low), haga su primera declaración begin foo.myVar: = 'lo que quiera esta vez'; final; – Dan

0

La función "Campos calculados" en TOAD es en realidad bastante potente si se usa de la manera correcta. No es más que un editor de scripts "token" que se adjunta a la consulta en sí. Solo está disponible a través del Query Design Editor, y no desde el Editor nativo, que le permite escribir SQL directamente.

Como sugerencia, la próxima vez que cree una consulta diseñada en TOAD y necesite crear WHERE compleja o subconsultas, pruebe la función "Campos calculados" y use la opción FORMS para básicamente adjuntar sus condiciones a una columna determinada o consulta. Te sorprenderá lo poderoso que es. Y ayuda a mantener su consulta SQL en un buen formato legible.

1

Uso las variables de sustitución SQL * PLUS. Ellos son compatibles con TOAD. Puede ejecutar este código presionando F5.

COLUMN VAR NEW_VALUE VAR_VALUE 

SELECT 'SOMETHING' VAR FROM DUAL; --this sets 'VAR_VALUE' = 'SOMETHING' 

SELECT '&VAR_VALUE' FROM DUAL; --this uses the value set by the previous stmt. 
+0

Como está escrito, esta también es una buena respuesta: incluso puede tener múltiples variables y todo se puede ejecutar como un script en Toad. La última declaración en la respuesta anterior se puede ejecutar por sí misma como una única consulta, y Toad te preguntará por cada una de las variables de tipo '&'; sin embargo, incluso si todas sus variables tienen el mismo nombre, Toad le preguntará por todos y cada uno. –

Cuestiones relacionadas