sql - 了解 Oracle 函数中的“BULK COLLECT”
问题描述
给定以下 Oracle 函数:
CREATE or REPLACE FUNCTION foo(id NUMBER, category VARCHAR) RETURN CHAR IS
TYPE MY_ARRAY2 IS TABLE OF NUMBER;
MY_ARRAY MY_ARRAY2;
BEGIN
SELECT my_id BULK COLLECT INTO my_array FROM my_table
RETURN (
CASE WHEN category = 'FOO' AND (id member of MY_ARRAY)
THEN 'Y'
ELSE 'N'
END
);
END;
查找的性质是什么:
SELECT my_id BULK COLLECT INTO my_array FROM my_table
或者,换句话说,有什么我可以添加到这条线或其他地方来加快查找速度 - 也许是一个索引?
解决方案
您所能做的就是使用单个选择MAX
或COUNT
AS
..
..
v_retval VARCHAR2(10);
SELECT MAX(CASE
WHEN category = 'FOO'
AND id = my_id
THEN 'Y'
ELSE 'N'
END) INTO v_retval
FROM my_table;
RETURN v_retval;
这取决于字符串 "Y" > "N" 的事实。您也可以使用COUNT(CASE ..
另一个案例where count > 1 THEN 'Y'
在 id (或表中引用的其他列)上添加索引将有助于加快查询速度
请注意,最好使用形式的过程参数p_id
并p_category
避免冲突
推荐阅读
- reactjs - 为什么在反应中使用输入值
- python - 检查 seaborn 散点图函数是否采样数据
- android - 这里 Map setIsolatedDiskCacheRootPath 返回 `false`
- python - 如果它不在 nixpkgs 中,如何将 python 包添加到 shell.nix?
- python - 根据第二列中的值在第二个数据帧中任何行的容差值内过滤数据帧列
- c++ - C++ 中的编译时 Base64 解码
- c++ - 将朋友从模板导出到全局命名空间
- python - Django - 如何动态地将脚本/类添加到代码中?
- javascript - Angular 延迟加载组件,仅在刷新后加载
- php - 如何在sql中选择对应的ID