首页 > 解决方案 > SELECT 语句中的 Oracle 11g PLSQL 集合

问题描述

我在 PLSQL 开始块中有一个类型表的集合,我不得不在我的代码中多次使用它。

我有什么方法可以在 SELECT 语句中使用列表(表类型)?我的目标是编写更少的代码。

我已将数组 (TABLE) 直接包含在 SELECT 语句中

波纹管脚本显示了我正在尝试做的事情,但显然,我不能这样做,因为我们不能在 SQL 语句中使用集合(请检查删除语句)。

clear Screen
SET SERVEROUTPUT ON
SET linesize 300
SET timing ON

WHENEVER SQLERROR EXIT failure ROLLBACK;
WHENEVER oserror EXIT failure ROLLBACK;

DECLARE
    code_groupe            VARCHAR2 (50 CHAR);
    code_grp               VARCHAR2 (4 CHAR);
    TYPE arrayList is table of varchar2(50);
    site_code_ls arrayList;
BEGIN
    code_grp          := 'ABDE';
    site_code_ls      := arrayList ('D','C','B','A','L');
    DELETE CARP.PLACES_GROUPS
     WHERE CODE_GROUPE = code_grp AND CODE_PLACE NOT IN (SELECT S.CODE
                                                       FROM CARP.PLACE P
                                                      WHERE P.CODE_IMPLANTATION IN site_code_ls;
    COMMIT;
END;
/
exit;

标签: selectplsqlcollectionsoracle11g

解决方案


您不能使用这样的本地集合,但可以使用forall快速的集合,如下所示:

declare 
  type tt is table of varchar2(5);
  vt tt := tt('C', 'E', 'N', 'X');
begin 
  forall i in vt.first..vt.last 
    delete from test 
    where name = vt(i);
end;

在这里forall您可以看到和的速度比较for ... loop


推荐阅读