Как использовать переменные в 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'