You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在PL/SQL中一次性从所有模式的ALL_OBJECTS查询全部内容

一次性查询多模式对象的简便方法

最直接的方法:利用ALL_OBJECTS的OWNER字段过滤

ALL_OBJECTS视图本身就包含了你有权限访问的所有模式(OWNER字段)的对象,无需重复执行查询,直接通过OWNER条件指定目标模式即可:

SELECT owner AS schema_name, object_name, object_type
FROM ALL_OBJECTS
WHERE owner IN ('A', 'B', 'C', 'D') -- 替换为你的目标模式列表
AND object_name LIKE '%something%'; -- 替换为你的搜索关键词

若要搜索所有可访问模式,去掉WHERE owner IN (...)条件即可。

动态SQL生成(适用于复杂查询场景)

如果需要针对每个模式执行更复杂的逻辑,可以先生成包含所有模式的查询语句,再一次性执行:

-- 生成合并查询语句
SELECT 'SELECT ''' || owner || ''' AS schema_name, object_name, object_type FROM ALL_OBJECTS WHERE owner = ''' || owner || ''' AND object_name LIKE ''%something%''' || ' UNION ALL'
FROM ALL_USERS
WHERE owner IN ('A', 'B', 'C', 'D'); -- 指定目标模式

将生成的结果复制后,去掉最后一行的UNION ALL,执行完整SQL即可得到合并结果。

PL/SQL批量执行(支持灵活输出或存储)

如果需要自定义结果处理逻辑,可通过PL/SQL块循环执行:

1. 输出到控制台

SET SERVEROUTPUT ON;
DECLARE
    CURSOR c_target_schemas IS
        SELECT username FROM ALL_USERS WHERE username IN ('A', 'B', 'C', 'D');
BEGIN
    FOR rec IN c_target_schemas LOOP
        DBMS_OUTPUT.PUT_LINE('=== 模式: ' || rec.username || ' ===');
        FOR obj_rec IN (
            SELECT object_name, object_type 
            FROM ALL_OBJECTS 
            WHERE owner = rec.username AND object_name LIKE '%something%'
        ) LOOP
            DBMS_OUTPUT.PUT_LINE(obj_rec.object_name || ' (' || obj_rec.object_type || ')');
        END LOOP;
        DBMS_OUTPUT.PUT_LINE('');
    END LOOP;
END;
/

2. 存储到临时表

-- 创建临时表存储结果
CREATE GLOBAL TEMPORARY TABLE temp_search_results (
    schema_name VARCHAR2(30),
    object_name VARCHAR2(128),
    object_type VARCHAR2(19)
) ON COMMIT PRESERVE ROWS;

-- 批量插入结果
DECLARE
    CURSOR c_target_schemas IS
        SELECT username FROM ALL_USERS WHERE username IN ('A', 'B', 'C', 'D');
BEGIN
    FOR rec IN c_target_schemas LOOP
        INSERT INTO temp_search_results
        SELECT rec.username, object_name, object_type 
        FROM ALL_OBJECTS 
        WHERE owner = rec.username AND object_name LIKE '%something%';
    END LOOP;
END;
/

-- 查询最终结果
SELECT * FROM temp_search_results;

内容的提问来源于stack exchange,提问作者Bittnutz

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.19 12:25:22