如何在 OracleSQLDeveloper 中使用变量?

下面是在 SQLServer2000中使用变量的示例。

DECLARE @EmpIDVar INT


SET @EmpIDVar = 1234


SELECT *
FROM Employees
WHERE EmployeeID = @EmpIDVar

我希望在 Oracle 中使用 SQLDeveloper 做同样的事情,而不需要额外的复杂性。这似乎是一件非常简单的事情,但我找不到一个简单的解决办法。我该怎么做?

456121 次浏览

答案很简单,不。

然而,通过使用绑定变量运行以下版本,您可以实现类似的功能:

SELECT * FROM Employees WHERE EmployeeID = :EmpIDVar

在 SQLDeveloper 中运行上述查询后,系统将提示您输入绑定变量 EmployeeID 的值。

在 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

在 SQLDeveloper 中,如果运行具有任意数量绑定变量(前缀为冒号)的语句,系统将提示您输入值。正如 Alex 指出的,你也可以使用“ Run Script”函数(F5)和 Alex 建议的 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;

我正在使用3.2版本中的 SQL-Developer。其他的东西对我来说不管用,但是这个可以:

define value1 = 'sysdate'


SELECT &&value1 from dual;

而且这是目前为止最巧妙的展示方式。

(如果省略了“ Definition”-part,系统会提示您输入该值)

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;

SQLDeveloper 支持替换变量,但是当您使用绑定 :var语法执行查询时,系统会提示您进行绑定(在对话框中)。

参考文献:

更新 替代变量使用起来有点麻烦,看:

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

您可以在其他地方阅读有关替换变量的内容; 它们在 SQLDeveloper 中非常方便。但是我适合尝试在 SQLDeveloper 中使用绑定变量。这就是我的工作:

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变量或者 recursor。不能只用 SELECT返回 PL/SQL 格式的结果集。

好吧,我知道这有点不靠谱,但这是一种在简单查询中使用变量的方法,而不是一个脚本:

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

你可以到处跑。

使用下一个查询:

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 开发人员中默认定义属性为“ ON”。

设置定义; 定义 batchNo = “123”; Update TABLE _ NAME SET IND1 = ‘ Y’,IND2 = ‘ Y’WHERE BATCH _ NO =’& batchNo’;

我认为对你来说最简单的方法是:

DEFINE EmpIDVar = 1234;


SELECT *
FROM Employees
WHERE EmployeeID = &EmpIDVar

对于字符串值,类似于:

DEFINE EmpIDVar = '1234';


SELECT *
FROM Employees
WHERE EmployeeID = '&EmpIDVar'