新秀Oracle变量问题

时间:2009-06-01 21:34:27

标签: oracle plsql

我有一个在SQL Server中完美运行的简单SQL语句:

DECLARE @ID VARCHAR(10)
SET @ID = '12345'

SELECT *
FROM theTable 
WHERE ID = @ID

有人可以告诉我如何在Oracle中做这个非常基本的事情吗?

4 个答案:

答案 0 :(得分:2)

您可以使用SQL * Plus接口(命令行中的sqlplus)执行类似的操作:

variable asdf number;
exec :asdf := 10;
select :asdf from dual;

此致 ķ

答案 1 :(得分:1)

在SQL * Plus中,它几乎相同:

SQL> create table thetable (id) as select '01234' from dual union all select '12345' from dual
  2  /

Table created.

SQL> var id varchar2(10)
SQL> exec :id := '12345'

PL/SQL procedure successfully completed.

SQL> select *
  2  from theTable
  3  where id = :id
  4  /

ID
-----
12345

1 row selected.

或在PL / SQL中:

SQL> declare
  2    l_id varchar2(10) := '12345';
  3    r thetable%rowtype;
  4  begin
  5    select *
  6      into r
  7      from thetable
  8     where id = l_id
  9    ;
 10    dbms_output.put_line(r.id);
 11  end;
 12  /
12345

PL/SQL procedure successfully completed.

此致 罗布。

答案 2 :(得分:1)

如果您的目标是将变量设置在脚本的顶部,那么这可能是您的解决方案吗?

with IDS as (
    select 1234 from dual
    union all
    select 1235 from dual
)

select * from TABLE where TABLE.ID in (select * from IDS)

答案 3 :(得分:0)

不幸的是,没有简单的方法。

你必须在一个块中声明它(我认为它可能必须是一个存储过程,或者至少在一个块中)。但是,这只是问题的一部分。一旦它在一个块中,结果就不会长时间“溢出”到控制台窗口。因此,您必须使用游标,将行信息复制到数组中,然后逐步执行数组,使用DMBS_OUTPUT打印值。

很容易让你回到MSSQL。

(Mark Harrison注意)这个答案不正确...请参阅代码的oracle版本的其他答案。