select - 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;
解决方案
您不能使用这样的本地集合,但可以使用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
。
推荐阅读
- java - Lambda 表达式中方法引用的方法引用
- python - 允许所有活动用户登录到 django 管理站点
- python - 试图在 pygame 的 for 循环中创建对象并得到 AttributeError: 'FoodItems' object has no attribute 'add_internal'
- c# - 如何在自动化测试中处理键盘?
- c++ - 如何在linux中访问新页面时减少延迟
- java - 如何创建同时在主表行和具有关系 OneToMany 的子行中搜索的 JPA 查询
- java - 如何获取特定消息并仅从队列中删除该消息
- python - ValueError:检查输入时出错:预期 input_1 有 3 个维度
- php - 如何在同一列中查询多个 orderby?
- unit-testing - UI5 - 如何在没有 allTests 文件的情况下运行 Karma,从文件夹中运行所有测试