valor - ¿Cómo uso las variables en Oracle SQL Developer?
variables de sustitucion pl sql (8)
En SQL * Plus, puedes hacer algo muy similar
SQL> variable v_emp_id number;
SQL> select 1234 into :v_emp_id from dual;
1234
----------
1234
SQL> select *
2 from emp
3 where empno = :v_emp_id;
no rows selected
En SQL Developer, si ejecuta una instrucción que tiene cualquier cantidad de variables de vinculación (con el prefijo de dos puntos), se le pedirá que ingrese los valores. Como señala Alex, también puede hacer algo similar con la función "Ejecutar script" (F5) con la sintaxis alternativa de EXEC que Alex sugiere.
variable v_count number;
variable v_emp_id number;
exec :v_emp_id := 1234;
exec select count(1) into :v_count from emp;
select *
from emp
where empno = :v_emp_id
exec print :v_count;
A continuación se muestra un ejemplo del uso de variables en SQL Server 2000.
DECLARE @EmpIDVar INT
SET @EmpIDVar = 1234
SELECT *
FROM Employees
WHERE EmployeeID = @EmpIDVar
Quiero hacer exactamente lo mismo en Oracle usando SQL Developer sin complejidad adicional. Parece algo muy simple de hacer, pero no puedo encontrar una solución simple. ¿Cómo puedo hacerlo?
Estoy usando SQL-Developer en la Versión 3.2. Las otras cosas no funcionaron para mí, pero esto hizo:
define value1 = ''sysdate''
SELECT &&value1 from dual;
También es la manera más hábil presentada aquí, todavía.
(Si omite la parte "definir", se le pedirá ese valor)
Hay dos tipos de variables en SQL-plus: sustitución y enlace.
Esto es una sustitución (las variables de sustitución pueden reemplazar las opciones de comando SQL * Plus u otro texto codificado):
define a = 1;
select &a from dual;
undefine a;
Esto es bind (las variables de enlace almacenan valores de datos para sentencias SQL y PL / SQL ejecutadas en RDBMS, pueden contener valores únicos o completar conjuntos de resultados):
var x number;
exec :x := 10;
select :x from dual;
exec select count(*) into :x from dual;
exec print x;
SQL Developer admite variables de sustitución, pero cuando ejecuta una consulta con la sintaxis bind :var
, se le solicita el enlace (en un cuadro de diálogo).
Referencia:
- http://www.oracle.com/technetwork/testcontent/sub-var-087723.html SQL * Plus Variables de sustitución, Christopher Jones, 2004
Las variables de sustitución de ACTUALIZACIÓN son un poco difíciles de usar, mira:
define phone = ''+38097666666'';
select &phone from dual; -- plus is striped as it is number ))
select ''&phone'' from dual; -- plus is preserved as it is string
Intente esto, funcionará, es mejor crear un procedimiento, si el procedimiento no es posible, puede usar este script.
with param AS(
SELECT 1234 empid
FROM dual)
SELECT *
FROM Employees, param
WHERE EmployeeID = param.empid;
END;
Ok, sé que esto es un truco, pero esta es una forma de usar una variable en una consulta simple, no en una secuencia de comandos:
WITH
emplVar AS
(SELECT 1234 AS id FROM dual)
SELECT
*
FROM
employees,
emplVar
WHERE
EmployId=emplVar.id;
Tienes que ejecutarlo en todas partes.
Puede leer en otras partes las variables de sustitución; son bastante útiles en SQL Developer. Pero tengo ajustes tratando de usar variables de vinculación en SQL Developer. Esto es lo que hago:
SET SERVEROUTPUT ON
declare
v_testnum number;
v_teststring varchar2(1000);
begin
v_testnum := 2;
DBMS_OUTPUT.put_line(''v_testnum is now '' || v_testnum);
SELECT 36,''hello world''
INTO v_testnum, v_teststring
from dual;
DBMS_OUTPUT.put_line(''v_testnum is now '' || v_testnum);
DBMS_OUTPUT.put_line(''v_teststring is '' || v_teststring);
end;
SET SERVEROUTPUT ON
hace para que el texto pueda imprimirse en la consola de salida del script.
Creo que lo que estamos haciendo aquí se llama oficialmente PL / SQL. Hemos dejado la tierra pura de SQL y estamos usando un motor diferente en Oracle. ¿Ves el SELECT
arriba? En PL / SQL siempre tiene que SELECT ... INTO
una variable o un refcursor. No puede simplemente SELECT
y devolver un conjunto de resultados en PL / SQL.
Respuesta simple NO.
Sin embargo, puede lograr algo similar ejecutando la siguiente versión utilizando variables de vinculación:
SELECT * FROM Employees WHERE EmployeeID = :EmpIDVar
Una vez que ejecute la consulta anterior en SQL Developer, se le pedirá que ingrese un valor para la variable de enlace EmployeeID.
Use la siguiente consulta:
DECLARE
EmpIDVar INT;
BEGIN
EmpIDVar := 1234;
SELECT *
FROM Employees
WHERE EmployeeID = EmpIDVar;
END;