2011-04-14 23 views
5

Parece que no puedo obtener variables para trabajar en una cláusula where de Oracle PL/SQL. Vengo de un fondo de Microsoft SQL Server y allí fue fácil. Por ejemplo, ¿cuáles serían todos los pasos necesarios para hacer algo similar a lo siguiente?Cómo usar variables en Oracle PL/SQL donde la cláusula

declare @var int set @var = 1 

select * from SomeTable where SomeField = @var 

Esto no parece que debería ser difícil en PL/SQL, pero evidentemente lo es. : -/¿Escuché que necesito usar cursores y elementos similares en PL/SQL?

Cualquier ayuda sería muy apreciada. Gracias.

Respuesta

9

¿Qué desea hacer con los datos que devuelve SELECT? Si lo que desea es ver lo que no es necesario PL/SQL en absoluto, sólo hacer esto en SQL Plus:

variable var number 
exec :var := 1 

select * from SomeTable where SomeField = :var; 

O en una herramienta como SQL Developer o sapo, simplemente hacer esto:

select * from SomeTable where SomeField = :var; 

y le solicitará que ingrese el valor para: var.

+0

Esto es lo que el OP estaba pidiendo, al menos, se ve muy similar a lo que se muestra en el ejemplo SQLServer. –

+3

Gracias! Esto parece un buen paso en esa dirección. Sí, estoy usando Oracle SQL Developer. ¿Hay alguna manera de insertar la variable en el código y hacer que aparezca en un mensaje emergente? – MattB

5

El siguiente código declara una variable var para usar en la cláusula WHERE, y una variable result para poner el resultado en y luego lo ejecuta dentro de un bloque PL/SQL.

DECLARE 
    var  INT := 1; 
    result INT; 
BEGIN 
    SELECT 123 
    INTO result 
    FROM DUAL 
    WHERE var = 1; 

    DBMS_OUTPUT.put_line (var); 
    DBMS_OUTPUT.put_line (result); 
END; 

Los DBMS_OUTPUT.PUT_LINE llamadas hacerla producir esta salida DBMS:

1 
123 
+0

+1 Solo necesita aclarar que esta sintaxis es para un SELECT que debe devolver exactamente una fila. –

+0

Gracias. ¿Qué hay de las múltiples filas? – MattB

2
declare 

    type t_rec is record 
    (
    col1 number, 
    col2 myTable.col2%type 
); 
    v_rec t_rec; 

    type t_tab is table of v_rec%type index by binary_integer; 
    v_tab t_tab; 

begin 

    select col1, col2 
    bulk collect into v_tab 
    from myTable 
    where col3 = 'BLAH'; 

    -- do something great with v_tab... 

end; 

también saben que si se intenta seleccionar a (oa granel recoger en) una variable y no se devuelven filas, obtendrá una excepción no_data_found, por lo que es posible que desee manejar esa situación.

Ver more here en colecciones pl/sql. Arriba utiliza una matriz asociativa, pero también hay tablas anidadas y varrays. De nuevo, mira el enlace.

Espero que ayude.

0

lo uso como esto

select * from sec_mainmenu where serno = '&MENU_ID'; 

Cuando se ejecuta, PL/SQL solicitará valor MENU_ID.

Cuestiones relacionadas