在SQL Developer中使用变量作为参数的简单查询

时间:2019-12-16 19:37:18

标签: oracle oracle-sqldeveloper

好吧,我看到了很多问题试图回答这个问题,但是所有答案似乎都非常复杂,或者实际上并没有回答问题。

有没有一种方法可以简单地执行以下操作:

DECLARE
   v_some_variable VARCHAR2(10) := 'Find Me';
BEGIN
  select column1, column2, column3
  from someTable st
  where st.columnTarget = v_some_variable
END;

并且将其显示在网格中吗?

这在SQL Server上是如此简单,而在Oracle中却并非如此简单。

我从各种答案中尝试的每个排列或组合都不起作用并给出错误,要求在运行查询之前从输出定义每个列和数据类型,或者不输出到网格,并且必须滚动自己的文本输出。我认为所有这些都是非常差的解决方案。我想念什么? Oracle可以做得这么好吗?

3 个答案:

答案 0 :(得分:1)

您需要学习以Oracle方式做事,这与SQL Server方式不同。如果您知道Oracle的工作方式,它在Oracle中也非常简单。 首先,我们创建数据库表并添加一些数据。

create table some_table (first varchar2(10), second varchar2(10));

insert into some_table values ('First', 'Find me');

现在使用PL / SQL。

declare
  v_var varchar2(10);
  v_var2 varchar2(10);
begin
  v_var := 'Find me';
  select first into v_var2 from some_table where second = v_var;
end;
/

比较我的PL / SQL和您的PL / SQL。提示:请注意,我的包含 to

请参阅此db fiddle

答案 1 :(得分:1)

它是arguably possible to print query output from PL/SQL by returning a refcursor or printing it or something。尽管像您一样,我发现这些解决方案都不是非常简单或直观的。

我在Oracle中进行了大量SQL开发,通常-如果您想返回结果网格,请不要使用PL / SQL块。只需使用普通的SQL语句即可。

select column1, column2, column3
  from someTable st
  where st.columnTarget = :v_some_variable; -- when you run this, it'll prompt for the value

如果您不喜欢提示弹出窗口,请像这样you can also declare bind variables in SQL*Plus(SQL Developer的后端):

var v_some_variable VARCHAR2(10)
exec :v_some_variable := 'Find Me';

select column1, column2, column3
  from someTable st
  where st.columnTarget = :v_some_variable;

如果将其作为脚本(F5)运行,它将不会提示您输入值。请注意,这仍然没有使用PL / SQL块。

答案 2 :(得分:0)

如果您只想使用 SQLPlus 编写查询并执行查询以在网格中查看结果,那么最简单的方法是:

  1. 首先定义参数:
define p = 1000;
  1. 然后您可以使用它:
select *
from table1 t1
join etc on etc.id = t1.etc_id
where etc.p = &p