多年前我曾经做过Oracle开发。在过去15年的大部分时间里,我主要使用SQL Server,而且我已经完成了Oracle的工作,并且不受Web服务等工作的影响。
我的问题似乎已经在网上被问了几次,但似乎很难以某种方式进行沟通 - 至少从答案来判断。我非常感谢工具和功能的不同,知道我必须学习新的东西,但这很简单,但似乎很难做到。
我希望对数据库进行一些临时查询。目前我们正在使用SQL Navigator - 我愿意使用其他工具......
在SQL Server Management Studio中,如果打开一个查询窗口,键入一些返回值或集合的SQL,就可以在结果窗口中很好地显示行或值。
我已经收集到了与Oracle PL / SQL有些不同的东西,我得知我需要返回一个游标 - 但是如何获得一个显示结果的工具呢?
我开始很简单:
declare
my_id number := 356655;
cursor c1 is select my_id from dual;
begin
open c1;
end;
运行正常 - 但我怎么看结果呢?是否有任何工具可以像SSMS一样“很好”地解决这个问题?我习惯于能够做很多这样的事情,包括像
这样的事情(也许不完全正确的语法?但你明白了......)
declare
my_id number := 356655;
cursor c1 is select name from my_table where id = my_id;
begin
open c1;
将结果显示为文本/网格。理想情况下,有一个很好的解决方案。一些漂亮的新工具,也许吧?
答案 0 :(得分:3)
使用SQL Developer或SQL * Plus,您可以使用在PL / SQL块之前声明的绑定变量:
variable rc refcursor;
declare
my_id number := 356655;
begin
open :rc for select my_id from dual;
end;
/
print rc
RC
-------------------------------
356655
您还可以在查询中使用绑定变量,这可能很有用:
variable my_id number;
variable rc refcursor;
execute :my_id := 356655;
begin
open :rc for select :my_id from dual;
end;
/
print rc
SQL * Plus文档中涵盖了variable
和print
命令,这些命令主要适用于SQL Developer - 其own documentation包括commands that are carried over from SQL*Plus
如果您有一个返回引用游标的函数,那么您可以在查询中调用它,如select func(val) from dual
,然后结果可以在网格中;或者您可以使用相同的:rc
绑定变量调用函数(或过程)并打印它。但是如果你只做临时查询,我不确定是否有帮助。
另一方面,即使您的查询很复杂,使用PL / SQL块进行即席查询似乎也有点笨拙。您需要有充分的理由在块中为select语句打开游标,而不是直接运行select
。 (不确定这是否是SQL Server的事情,或者你真的需要这样做!)。如果您只是在块内运行查询,则不需要该块,即使您要为查询中使用的值保留绑定变量:
variable my_id number;
execute :my_id := 356655;
select :my_id from dual;
:MY_ID
----------
356655
答案 1 :(得分:1)
无论如何,这应该适用于任何oracle sql客户端:
如果您只想查看结果,可以使用
dbms_output.put_line('Foo' || somevar || ' bar');
在此之前,运行
SET SERVEROUTPUT ON
上的示例
答案 2 :(得分:1)
我建议使用免费从oracle网站获得的sql developer。有一个按钮,允许您将sql作为脚本运行,它将返回您想要的内容。 SSMS不适用于pl / sql。