下面是在 SQL Server 2000 中使用变量的示例。
DECLARE @EmpIDVar INT
SET @EmpIDVar = 1234
SELECT *
FROM Employees
WHERE EmployeeID = @EmpIDVar
我想在不增加复杂性的情况下使用 SQL Developer 在 Oracle 中做同样的事情。这似乎是一件非常简单的事情,但我找不到简单的解决方案。我该怎么做?
我正在使用版本 3.2 中的 SQL-Developer。其他东西对我不起作用,但这确实:
define value1 = 'sysdate'
SELECT &&value1 from dual;
这也是这里展示的最巧妙的方式。
(如果您省略“定义”部分,系统将提示您输入该值)
SQL-plus 中有两种类型的变量:替换和绑定。
这是替换(替换变量可以替换 SQL*Plus 命令选项或其他硬编码文本):
define a = 1;
select &a from dual;
undefine a;
这是绑定(绑定变量存储在 RDBMS 中执行的 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 支持替换变量,但是当您使用绑定语法执行查询时,:var
系统会提示您进行绑定(在对话框中)。
参考:
UPDATE 替换变量使用起来有点棘手,看:
define phone = '+38097666666';
select &phone from dual; -- plus is stripped as it is a number
select '&phone' from dual; -- plus is preserved as it is a string
In SQL*Plus, you can do something very 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
In SQL Developer, if you run a statement that has any number of bind variables (prefixed with a colon), you'll be prompted to enter values. As Alex points out, you can also do something similar using the "Run Script" function (F5) with the alternate EXEC syntax Alex suggests does.
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;
好的,我知道这有点 hack,但这是在简单查询中使用变量的一种方法,而不是脚本:
WITH
emplVar AS
(SELECT 1234 AS id FROM dual)
SELECT
*
FROM
employees,
emplVar
WHERE
EmployId=emplVar.id;
你可以在任何地方运行它。
简单的答案 NO。
但是,您可以通过使用绑定变量运行以下版本来实现类似的效果:
SELECT * FROM Employees WHERE EmployeeID = :EmpIDVar
在 SQL Developer 中运行上述查询后,系统将提示您输入绑定变量 EmployeeID 的值。
您可以在其他地方阅读替代变量;它们在 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
使它可以将文本打印到脚本输出控制台。
我相信我们在这里所做的正式称为 PL/SQL。我们已经离开了纯 SQL 领域,并在 Oracle 中使用了不同的引擎。看到SELECT
上面了吗?在 PL/SQL 中,您总是必须SELECT ... INTO
使用变量或引用。您不能只SELECT
返回 PL/SQL 中的结果集。
我认为在你的情况下最简单的方法是:
DEFINE EmpIDVar = 1234;
SELECT *
FROM Employees
WHERE EmployeeID = &EmpIDVar
对于字符串值,它将类似于:
DEFINE EmpIDVar = '1234';
SELECT *
FROM Employees
WHERE EmployeeID = '&EmpIDVar'
使用下一个查询:
DECLARE
EmpIDVar INT;
BEGIN
EmpIDVar := 1234;
SELECT *
FROM Employees
WHERE EmployeeID = EmpIDVar;
END;
试试这个,它会工作,最好创建一个程序,如果程序是不可能的,你可以使用这个脚本。
with param AS(
SELECT 1234 empid
FROM dual)
SELECT *
FROM Employees, param
WHERE EmployeeID = param.empid;
END;
在 sql developer 中定义属性默认为“ON”。如果它在任何情况下为“OFF”,请使用以下步骤。
set define on;
define batchNo='123';
update TABLE_NAME SET IND1 = 'Y', IND2 = 'Y' WHERE BATCH_NO = '&batchNo';