下面是在SQL Server 2000中使用变量的示例。
DECLARE @EmpIDVar INT
SET @EmpIDVar = 1234
SELECT *
FROM Employees
WHERE EmployeeID = @EmpIDVar
我想在Oracle中使用SQL Developer完成同样的事情而不会增加复杂性。这似乎是一件非常简单的事情,但我找不到一个简单的解决方案。我该怎么办?
答案 0 :(得分:82)
我在3.2版中使用SQL-Developer。其他的东西对我不起作用,但这样做了:
define value1 = 'sysdate'
SELECT &&value1 from dual;
这也是这里提出的最简洁的方式。
(如果省略“define”-part,系统会提示您输入该值)
答案 1 :(得分:61)
SQL-plus中有两种类型的变量:substitution和bind。
这是替换(替换变量可以替换SQL * Plus命令选项或其他硬编码文本):
define a = 1;
select &a from dual;
undefine a;
这是 bind (绑定变量存储在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支持替换变量,但是当您使用bind :var
语法执行查询时,系统会提示您进行绑定(在对话框中)。
参考:
更新 替换变量使用起来有点棘手,请看:
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
答案 2 :(得分:48)
在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中,如果运行具有任意数量绑定变量(带冒号前缀)的语句,系统将提示您输入值。正如Alex指出的那样,你也可以使用“运行脚本”功能(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 :(得分:12)
简单回答NO。
但是,您可以通过使用绑定变量运行以下版本来实现类似的功能:
SELECT * FROM Employees WHERE EmployeeID = :EmpIDVar
在SQL Developer中运行上面的查询后,系统将提示您输入绑定变量EmployeeID的值。
答案 4 :(得分:8)
好的,我知道这有点像黑客,但这是一种在简单查询中使用变量的方法,而不是脚本:
WITH
emplVar AS
(SELECT 1234 AS id FROM dual)
SELECT
*
FROM
employees,
emplVar
WHERE
EmployId=emplVar.id;
你可以在任何地方运行它。
答案 5 :(得分:7)
你可以在其他地方读取替代变量;它们在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
变量或refcursor。您不能只是SELECT
并在PL / SQL中返回结果集。
答案 6 :(得分:0)
使用下一个查询:
DECLARE
EmpIDVar INT;
BEGIN
EmpIDVar := 1234;
SELECT *
FROM Employees
WHERE EmployeeID = EmpIDVar;
END;
答案 7 :(得分:0)
试试这个它会起作用,它最好创建一个程序,如果不能执行程序,你可以使用这个脚本。
with param AS(
SELECT 1234 empid
FROM dual)
SELECT *
FROM Employees, param
WHERE EmployeeID = param.empid;
END;
答案 8 :(得分:0)
在sql developer中,默认情况下定义属性“ ON”。如果是“ OFF”,请使用以下步骤。
set define on;
define batchNo='123';
update TABLE_NAME SET IND1 = 'Y', IND2 = 'Y' WHERE BATCH_NO = '&batchNo';
答案 9 :(得分:0)
我认为您情况下最简单的方法是:
DEFINE EmpIDVar = 1234;
SELECT *
FROM Employees
WHERE EmployeeID = &EmpIDVar
对于字符串值,它将类似于:
DEFINE EmpIDVar = '1234';
SELECT *
FROM Employees
WHERE EmployeeID = '&EmpIDVar'