Как использовать переменные в Oracle SQL Developer?

Ниже приведен пример использования переменных в SQL Server 2000.

DECLARE @EmpIDVar INT

SET @EmpIDVar = 1234

SELECT *
FROM Employees
WHERE EmployeeID = @EmpIDVar

Я хочу сделать то же самое в Oracle с помощью SQL Developer без дополнительной сложности. Это кажется очень простой задачей, но я не могу найти простого решения. Как я могу это сделать?

Ответ 1

Я использую SQL-Developer в Версии 3.2. Другой материал не работал у меня, но это произошло:

define value1 = 'sysdate'

SELECT &&value1 from dual;

Кроме того, это еще и самый гладкий способ.

(Если вы опустите "define" -part, вам будет предложено указать это значение)

Ответ 2

В SQL-plus есть два типа переменных: подстановка и связывание.

Это подстановка (переменные подстановки могут заменить параметры команды SQL * Plus или другой жестко заданный текст):

define a = 1;
select &a from dual;
undefine a;

Это связывание (переменные связывания хранят значения данных для операторов SQL и PL/SQL, выполняемых в СУБД; они могут содержать отдельные значения или полные наборы результатов):

var x number;
exec :x := 10;
select :x from dual;
exec select count(*) into :x from dual;
exec print x;

SQL Developer поддерживает переменные подстановки, но когда вы выполняете запрос с синтаксисом bind :var вас запрашивается привязка (в диалоговом окне).

Ссылка:

Заменить переменные UPDATE немного сложно, смотрите:

define phone = '+38097666666';
select &phone from dual; -- plus is stripped as it is number
select '&phone' from dual; -- plus is preserved as it is string

Ответ 3

В SQL * Plus вы можете сделать что-то очень похожее

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

В SQL Developer, если вы запустите оператор, который имеет любое количество переменных привязки (с префиксом двоеточия), вам будет предложено ввести значения. Как указывает Алекс, вы также можете сделать что-то подобное, используя функцию "Run Script" (F5) с альтернативным синтаксисом EXEC, который предлагает Алекс.

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;

Ответ 4

Простой ответ №.

Однако вы можете добиться чего-то подобного, выполнив следующую версию с использованием переменных привязки:

SELECT * FROM Employees WHERE EmployeeID = :EmpIDVar 

После запуска запроса выше в SQL Developer вам будет предложено ввести значение для переменной bind EmployeeID.

Ответ 5

Хорошо, я знаю, что это немного хак, но это способ использовать переменную в простом запросе, а не в скрипте:

WITH
    emplVar AS
    (SELECT 1234 AS id FROM dual)
SELECT
    *
FROM
    employees,
    emplVar
WHERE
    EmployId=emplVar.id;

Вы можете запустить его везде.

Ответ 6

Вы можете читать в другом месте по переменным замещения; они довольно удобны в SQL Developer. Но я стараюсь использовать переменные связывания в SQL Developer. Это то, что я делаю:

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 делает так, чтобы текст мог быть напечатан на выходной консоли script.

Я считаю, что мы здесь официально называем PL/SQL. Мы оставили чистую землю SQL и используем другой движок в Oracle. Вы видите SELECT выше? В PL/SQL у вас всегда есть SELECT ... INTO переменная или refcursor. Вы не можете просто SELECT и вернуть результат в PL/SQL.

Ответ 7

Используйте следующий запрос:

DECLARE 
  EmpIDVar INT;

BEGIN
  EmpIDVar := 1234;

  SELECT *
  FROM Employees
  WHERE EmployeeID = EmpIDVar;
END;

Ответ 8

Попробуйте, это сработает, лучше создать процедуру, если процедура невозможна, вы можете использовать этот script.

  с параметром AS (
SELECT 1234 empid
FROM dual)
 ВЫБРАТЬ * FROM Сотрудники, param WHERE EmployeeID = param.empid;
КОНЕЦ;
Код>

Ответ 9

В sql developer определяем свойства по умолчанию "ON". Если это "ВЫКЛ" в любом случае, используйте следующие шаги.

set define on; define batchNo='123'; update TABLE_NAME SET IND1 = 'Y', IND2 = 'Y' WHERE BATCH_NO = '&batchNo';

Ответ 10

Я думаю, что самый простой способ в вашем случае это:

DEFINE EmpIDVar = 1234;

SELECT *
FROM Employees
WHERE EmployeeID = &EmpIDVar

Для строковых значений это будет выглядеть так:

DEFINE EmpIDVar = '1234';

SELECT *
FROM Employees
WHERE EmployeeID = '&EmpIDVar'