Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/84.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
特别查询Oracle PL/SQL-用于SQL Server开发人员_Sql_Oracle_Plsql_Database Tools - Fatal编程技术网

特别查询Oracle PL/SQL-用于SQL Server开发人员

特别查询Oracle PL/SQL-用于SQL Server开发人员,sql,oracle,plsql,database-tools,Sql,Oracle,Plsql,Database Tools,很多年前,我曾经做过Oracle开发。在过去的15年中,我大部分时间都在做SQL Server,在那里我做过Oracle的工作,通过Web服务等与工作隔离开来 我的问题似乎在网络上被问了好几次,但似乎很难沟通——至少从答案来看是这样。我非常欣赏工具和功能的不同,我知道我必须学习新的东西,但这很简单,但似乎很难做到 我想对数据库做一些特别的查询。目前我们正在使用SQL Navigator-我愿意使用其他工具 在SQLServerManagementStudio中,如果您打开一个查询窗口,键入一点S

很多年前,我曾经做过Oracle开发。在过去的15年中,我大部分时间都在做SQL Server,在那里我做过Oracle的工作,通过Web服务等与工作隔离开来

我的问题似乎在网络上被问了好几次,但似乎很难沟通——至少从答案来看是这样。我非常欣赏工具和功能的不同,我知道我必须学习新的东西,但这很简单,但似乎很难做到

我想对数据库做一些特别的查询。目前我们正在使用SQL Navigator-我愿意使用其他工具

在SQLServerManagementStudio中,如果您打开一个查询窗口,键入一点SQL以重新运行一个值或一个集,您将在结果窗口中获得一个很好的行或值显示

我发现,使用Oracle PL/SQL时,情况有点不同,我需要返回一个游标,但是如何获得一个工具来显示结果呢

我一开始很简单:

    declare 
        my_id number := 356655;
        cursor c1  is select my_id from dual;

    begin
        open c1;   
    end;
这很好,但我如何看待结果?有没有任何工具可以像SSM一样“很好地”处理这个问题?我已经习惯了做很多这样的事情,包括像这样的事情

(也许不是完全正确的语法?但你明白了…)

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

我用的

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

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

dbms_output.put_line('Foo' || somevar || ' bar');
在这之前,快跑

 SET SERVEROUTPUT ON 

查看

中的示例,我建议使用oracle网站免费提供的sql developer。有一个按钮,允许您以脚本的形式运行sql,它将返回您想要的内容。SSMS不能与pl/sql一起使用。

与或sql*一起使用时,您可以使用在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文档中介绍了和命令,该文档主要也适用于SQL开发人员,包括

如果您有一个返回ref游标的函数,那么您可以在查询中调用该函数,如
从dual
中选择func(val),然后结果可以放入网格中;或者,您可以使用相同的
:rc
绑定变量调用函数(或过程)并打印它。但是如果你只是做一些特别的查询,我不确定这两种方法是否有用

另一方面,即使您的查询很复杂,使用PL/SQL块进行特殊查询似乎有点费力。您需要一个很好的理由从块中打开select语句的游标,而不是直接运行
select
。(不确定这是否是SQL Server的事情,或者您是否真的需要这样做!)。如果只是在块内运行查询,则不需要块,即使要为查询中使用的值保留绑定变量:

variable my_id number;
execute :my_id := 356655;
select :my_id from dual;

    :MY_ID
----------
    356655 

大概选择的表是类似的?有趣的是,SQLNavigator似乎发现这是SQLPlus语法,并忽略了它。我不了解SQLDeveloper和SQLPlus之间的区别。SQL Developer是当今的行业标准工具吗?@kpollock-不确定是否有标准;很多人使用Toad或PL/sqldeveloper,但sqldeveloper具有免费的优势。它基本上是SQLPlus的GUI版本,带有少量OEM。我大部分时间仍然使用SQLPlus。不过,我不确定你说的“表格选择”是什么意思。如果执行简单的选择,则不需要PL/SQL位,结果可以转到网格或工作表脚本输出窗格,具体取决于运行它的方式(作为语句或脚本)。除非/直到您使用该客户机,否则这可能没有多大意义……”“使用PL/SQL块进行特殊查询似乎有点笨手笨脚”。你能解释一下“简单”的方法是什么吗?有些可能很复杂,有些可能很简单。这只是我工作方式的一部分——检查数据,发现问题,尝试解决问题。我现在是d/l SQL开发人员..@kpollock-我的意思是我不知道为什么要使用PL/SQL,而不是普通的SQL。我意识到您给出的示例对于学习它的工作原理来说是一个微不足道的示例,但是不清楚您真正的查询是需要PL/SQL元素还是可以是简单的
select
语句。您在SSMS中所做的描述听起来好像您只需要一个简单的
select
。我只是在做一些复杂程度未知的特殊查询。主要选择,通常带有变量。最简单的方法是什么?
variable my_id number;
execute :my_id := 356655;
select :my_id from dual;

    :MY_ID
----------
    356655