将变量传递给Oracle中的Select查询

时间:2014-12-08 14:53:58

标签: oracle11g

我正在使用Oracle 11g Db,在编写Oracle语法时遇到了麻烦。

我正在尝试将数字变量传递给我的select查询,并将select查询填充到游标。

Declare yr_nr NUMBER;
Begin
yr_nr := 2014;
SELECT DCD.CCY ID, DCD.CCYCDDSC DSC
 FROM CCYDCD DCD, CCYEXC EXC
 WHERE DCD.CCY = EXC.CCY
 AND EXC.YEARNR = yr_nr
End

此选择查询返回80条记录。如何重写这种语法。

1 个答案:

答案 0 :(得分:0)

好的,所以你在这里有一个匿名块,块中发生的一切都停留在那个块中。有点像拉斯维加斯。

换句话说,没有什么可以处理查询的结果集。当你这样做时:

declare

[varName] [type]

begin

    select foo from bar where column = var ;   <--- this has no place to go!

end

当您处于sqlPlus提示符时,sqlPlus有一个默认的记录集处理程序,然后处理返回的记录集并将其打印到屏幕上。

当您使用任何第三方工具(如JDBC或Oracle自己的OCI库)时,它们会提供一个记录集处理程序,然后通过适当的调用来解析它们以获取数据,例如:

rs.getInteger([query],[column] ) //which returns the specific value.

该匿名块本质上是一个存储过程。所以你必须要对结果集做些什么。这是你得到的错误“进入”错误的原因。

如果另一方面你做了类似的事情:

declare

  [varName] [type]
  result number ;
begin

    select count(foo) into result  from bar where column = var ;

end

变量结果的值为80,因为这是获取的记录数。

declare

[varName] [type]
cursor thisCursor(p1 in number ) is select foo from bar where column = p1 ;    

begin

    for rec in thisCursor(varName) loop

       If rec.column = [some value] then
          doSomething
       end if ;

    end loop ;

end

这样做可以让你对结果集做些什么。