Oracle PL/SQL中的表变量?

Oracle PL/SQL中的表变量?,oracle,plsql,Oracle,Plsql,我最近开始了一个新的开发职位,我在PL/SQL方面遇到了一些麻烦。我已经使用MS SQL很多年了,但是我发现PL/SQL有点棘手 在MS SQL中编写函数和存储过程时,我经常做的一件事是将重复出现的结果集放入表变量中,这样我就不必在整个过程中重新查询它们 大概是这样的: declare @badPeople table(recordPointer int) insert into @badPeople select BP_Record_Pointer from People where BP_B

我最近开始了一个新的开发职位,我在PL/SQL方面遇到了一些麻烦。我已经使用MS SQL很多年了,但是我发现PL/SQL有点棘手

在MS SQL中编写函数和存储过程时,我经常做的一件事是将重复出现的结果集放入表变量中,这样我就不必在整个过程中重新查询它们

大概是这样的:

declare @badPeople table(recordPointer int)
insert into @badPeople
select BP_Record_Pointer
from People
where BP_Bad = 1

我正在考虑在PL/SQL中做类似的事情,但我不太确定如何开始。如果这是可能的话,有什么想法吗?

在Oracle中,不像MS SQL,游标不被认为是魔鬼,也不需要避免。因此,通常在Oracle中使用游标的频率要比在MS SQL中使用游标的频率高得多。当然,如果您只使用SQL而不使用游标,那么这是最好的,但是不要害怕在Oracle中测试和使用游标。找一本关于PL/SQL的好书,这是一本好书。格拉茨的帖子是你可以使用的另一个选项。所以,买一本好书,你可以用它来决定什么时候用什么。与T-SQL相比,PL/SQL是一个非常丰富的环境。虽然它有更多的学习曲线,一旦你越过了最初的曲线,它是一种非常简单和强大的语言。最重要的是,这很有趣

declare
  type t_number is table of number;
  v_numbers t_number;
begin
  select BP_Record_Pointer
    bulk collect into v_numbers
    from People
    where BP_Bad = 1;
end;

这将创建一个嵌套表,其中包含表中的值。需要注意的是,该表在匿名块的末尾将超出范围,因此您要对其执行的任何操作都需要在该块内完成。

这里有一个类似的问题,可能有助于复制,如果您想要一个包含多个列的表,该怎么办?