Inlist的绑定优化(书摘备查)

 -- 建立类型 CREATE OR REPLACE TYPE numtabletype AS TABLE OF NUMBER;

CREATE OR REPLACE TYPE vartabletype AS TABLE OF VARCHAR2 (1000);

-- 解析字符串 CREATE OR REPLACE FUNCTION str2numlist (p_string IN VARCHAR2)    RETURN numtabletype AS    v_str    LONG         DEFAULT p_string || ',';    v_n      NUMBER;    v_data   numtabletype := numtabletype (); BEGIN    LOOP       v_n := TO_NUMBER (INSTR (v_str, ','));       EXIT WHEN (NVL (v_n, 0) = 0);       v_data.EXTEND;       v_data (v_data.COUNT) := LTRIM (RTRIM (SUBSTR (v_str, 1, v_n - 1)));       v_str := SUBSTR (v_str, v_n + 1);    END LOOP;

   RETURN v_data; END;

CREATE OR REPLACE FUNCTION str2varlist (p_string IN VARCHAR2)    RETURN vartabletype AS    v_str    LONG            DEFAULT p_string || ',';    v_n      VARCHAR2 (2000);    v_data   vartabletype    := vartabletype (); BEGIN    LOOP       v_n := INSTR (v_str, ',');       EXIT WHEN (NVL (v_n, 0) = 0);       v_data.EXTEND;       v_data (v_data.COUNT) := LTRIM (RTRIM (SUBSTR (v_str, 1, v_n - 1)));       v_str := SUBSTR (v_str, v_n + 1);    END LOOP;

   RETURN v_data; END;

-- 绑定查询 SELECT /*+ ordered use_nl(a,u) */        ID, NAME, nick   FROM TABLE (str2numlist (:bind0)) a, users u  WHERE u.ID = a.COLUMN_VALUE;

SELECT /*+ leading(a) */        ID, NAME, nick   FROM users u  WHERE ID IN (SELECT *                 FROM TABLE (str2numlist (:bind0)) a);

SELECT /*+ index(u ind_users_id) */        ID, NAME, nick   FROM users u  WHERE ID IN (SELECT *                 FROM THE (SELECT CAST (str2numlist (:bind0) AS numtabletype)                             FROM DUAL)                WHERE ROWNUM < 1000);

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏沃趣科技

SQL优化案例-从执行计划定位SQL问题(三)

当SQL出现问题,能从执行计划中快速的定位哪部分出现问题很重要,SQL文本如下(为保证客户隐私,已经将注释和文字部分去掉):

1436
来自专栏IT技术精选文摘

数据库SQL性能优化(一)

substr(hbs_bh,1,4)=’5400’,优化处理:hbs_bh like ‘5400%’ trunc(sk_rq)=trunc(sysdate), ...

1856
来自专栏数据分析

[数据库基础]——快速浏览日期时间转换

阅读导航 数据库日期和时间类型 相互转换     time ⇌ date time ⇌ smalldatetime time ⇌ datetime tim...

2646
来自专栏王硕

原 通过连接libpq对PostgreSQL操作的例子

3898
来自专栏james大数据架构

你真的会玩SQL吗?透视转换的艺术

你真的会玩SQL吗?系列目录 你真的会玩SQL吗?之逻辑查询处理阶段 你真的会玩SQL吗?和平大使 内连接、外连接 你真的会玩SQL吗?三范式、数据完整性 你真...

1926
来自专栏Hadoop数据仓库

Oracle 自定义split 函数

Oracle没有提供split函数,但可以自己建立一个函数实现此功能。比如“abc defg  hijkl   nmopqr     stuvw  xyz”,分...

1789
来自专栏Samego开发资源

入门级Oracle存储过程 | oracle

882
来自专栏问天丶天问

Mysql 中英文排序

1374
来自专栏杨建荣的学习笔记

关于reset sequence(r3笔记第85天)

sequence在工作中使用比较频繁,对于Insert中插入的值,如果只需要它能够自动递增,这个时候sequence就派上用场了。 但是既然sequence的值...

2788
来自专栏后端之路

MySql优化器的bug?

背景 最近系统上了一个大客户 该客户反馈系统使用很慢,部分页面出现需要花到20s SELECT id_car idCar, i...

2636

扫码关注云+社区