Nat*_*han 109 sql oracle variables declare
下面是在SQL Server 2000中使用变量的示例.
DECLARE @EmpIDVar INT
SET @EmpIDVar = 1234
SELECT *
FROM Employees
WHERE EmployeeID = @EmpIDVar
Run Code Online (Sandbox Code Playgroud)
我想在Oracle中使用SQL Developer完成同样的事情而不会增加复杂性.这似乎是一件非常简单的事情,但我找不到一个简单的解决方案.我该怎么做?
Omp*_*pie 86
我在3.2版中使用SQL-Developer.其他的东西对我不起作用,但是这样做了:
define value1 = 'sysdate'
SELECT &&value1 from dual;
Run Code Online (Sandbox Code Playgroud)
它也是这里最简洁的方式.
(如果省略"define"-part,系统会提示您输入该值)
gav*_*koa 69
SQL-plus中有两种类型的变量:substitution和bind.
这是替换(替换变量可以替换SQL*Plus命令选项或其他硬编码文本):
define a = 1;
select &a from dual;
undefine a;
Run Code Online (Sandbox Code Playgroud)
这是绑定(绑定变量存储在RDBMS中执行的SQL和PL/SQL语句的数据值;它们可以包含单个值或完整的结果集):
var x number;
exec :x := 10;
select :x from dual;
exec select count(*) into :x from dual;
exec print x;
Run Code Online (Sandbox Code Playgroud)
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
Run Code Online (Sandbox Code Playgroud)
Jus*_*ave 49
在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
Run Code Online (Sandbox Code Playgroud)
在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;
Run Code Online (Sandbox Code Playgroud)
Cha*_*ndu 12
简单回答NO.
但是,您可以通过使用绑定变量运行以下版本来实现类似的功能:
SELECT * FROM Employees WHERE EmployeeID = :EmpIDVar
Run Code Online (Sandbox Code Playgroud)
在SQL Developer中运行上面的查询后,系统将提示您输入绑定变量EmployeeID的值.
好的,我知道这有点像黑客,但这是一种在简单查询中使用变量的方法,而不是脚本:
WITH
emplVar AS
(SELECT 1234 AS id FROM dual)
SELECT
*
FROM
employees,
emplVar
WHERE
EmployId=emplVar.id;
Run Code Online (Sandbox Code Playgroud)
你可以到处运行它.
你可以在其他地方读取替代变量; 它们在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;
Run Code Online (Sandbox Code Playgroud)
SET SERVEROUTPUT ON 使它可以将文本打印到脚本输出控制台.
我相信我们在这里所做的是官方称为PL/SQL.我们离开了纯粹的SQL土地,并在Oracle中使用了不同的引擎.你看到SELECT上面的?在PL/SQL中,您始终需要SELECT ... INTO变量或refcursor.您不能只SELECT在PL/SQL中返回结果集.
小智 5
我认为最简单的方法是:
DEFINE EmpIDVar = 1234;
SELECT *
FROM Employees
WHERE EmployeeID = &EmpIDVar
Run Code Online (Sandbox Code Playgroud)
对于字符串值,它将类似于:
DEFINE EmpIDVar = '1234';
SELECT *
FROM Employees
WHERE EmployeeID = '&EmpIDVar'
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
345512 次 |
| 最近记录: |