临时查询Oracle PL / SQL - 适用于SQL Server开发人员

时间:2014-03-31 10:03:25

标签: sql oracle plsql database-tools

多年前我曾经做过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;   

将结果显示为文本/网格。理想情况下,有一个很好的解决方案。一些漂亮的新工具,也许吧?

3 个答案:

答案 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文档中涵盖了variableprint命令,这些命令主要适用于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 Developer

无论如何,这应该适用于任何oracle sql客户端:

如果您只想查看结果,可以使用

dbms_output.put_line('Foo' || somevar || ' bar');

在此之前,运行

 SET SERVEROUTPUT ON 

查看docs.oracle.com

上的示例

答案 2 :(得分:1)

我建议使用免费从oracle网站获得的sql developer。有一个按钮,允许您将sql作为脚本运行,它将返回您想要的内容。 SSMS不适用于pl / sql。