2012-07-02 15 views
5

En el Servidor SQL, puedo definir variables locales como esta.¿Cuál es la forma más simple de definir una variable local en Oracle?

declare @id number := 1000 

select * from tbl_A where id = @id; 
select * from tbl_B where id = @id; 

Es muy conveniente. Traté de hacer lo mismo en PL/SQL pero no funciona.

DECLARE id number; 
select 1000 into id from dual; 

¿Sabes cómo hacer algo similar? El método más simple es mi objetivo.

Respuesta

9

Si desea definir una variable local en PL/SQL, se necesita un bloque PL/SQL completa

DECLARE 
    id NUMBER; 
BEGIN 
    SELECT 1000 
    INTO id 
    FROM dual; 
END; 

o simplemente

DECLARE 
    id NUMBER := 1000; 
BEGIN 
    <<do something that uses the local variable>> 
END; 

Si desea declarar una variable en SQL * Plus

SQL> variable id number 
SQL> begin 
     select 1000 into :id from dual; 
    end; 
    /

SQL> print id 

     ID 
---------- 
     1000 

SQL> SELECT * FROM tbl_a WHERE id = :id 
0

yo probamos este en Oracle y funcionó:

> DEF x = TOTO 
> SELECT '&x' FROM dual; 

El resultado será: TOTO

0

sintaxis general para declarar variables en PL/SQL es

var_nm tipo de datos [NOT NULL: = var_value];

  • var_nn es el nombre de la variable.
  • datatype es un tipo de datos PL/SQL válido.
  • NOT NULL es una especificación opcional sobre la variable a la que no se le puede asignar valor nulo a esta variable.
  • valor var_value o DEFAULT también es una especificación opcional, donde puede inicializar una variable con algún valor específico.
  • Cada declaración de variable es una declaración separada y debe terminarse con un punto y coma.

Podemos asignar un valor a las variables en una de las dos formas siguientes - (. Por ejemplo var_nm:= var_value;)

asignación
  1. directa
  2. Usando select from
(Ej SELECT col_nm INTO var_nm FROM tbl_nm [WHERE clause];).

En tu caso como Justin Cave ya ha mencionado, puede ser

DECLARE 
id number; 
BEGIN 
SELECT 1000 into id from dual; 
dbms_output.put_line('id : '|| id); 
END; 
/

O

DECLARE 
id number := 1000; 
BEGIN 
dbms_output.put_line('id : '|| id); 
END; 
/

NOTA: '/' es decir Volver slash después de palabra clave END indica a ejecutar la anterior PL/SQL bloque.

0

Una alternativa a DECLARE bloque es utilizar una cláusula CON:

WITH my_params AS (
    SELECT 123 AS min_id FROM DUAL 
) 
SELECT * 
FROM some_table 
WHERE id > (SELECT min_id FROM my_params) 

Es más portátiles como muchos vendedores soportan la cláusula y se puede cambiar sin problemas de parámetro a valor dinámico. Por ejemplo:

WITH my_params AS (
    SELECT min(id) AS min_id FROM some_id_table 
) 
SELECT * 
FROM some_table 
WHERE id > (SELECT min_id FROM my_params) 
Cuestiones relacionadas