好吧,我看到了很多问题试图回答这个问题,但是所有答案似乎都非常复杂,或者实际上并没有回答问题。
有没有一种方法可以简单地执行以下操作:
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可以做得这么好吗?
答案 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 编写查询并执行查询以在网格中查看结果,那么最简单的方法是:
define p = 1000;
select *
from table1 t1
join etc on etc.id = t1.etc_id
where etc.p = &p