oracle - Oracle 存储过程将返回表中的所有数据
问题描述
这是函数将返回我作为参数发送的表中的所有行
CREATE OR REPLACE FUNCTION get_results(tables_name IN varchar2)
RETURN SYS_REFCURSOR
IS
l_rc SYS_REFCURSOR;
BEGIN
OPEN l_rc
FOR 'SELECT *
FROM ' || tables_names ;
RETURN l_rc;
END;
此过程将调用上述函数。我将只使用类别名称调用该过程,并希望从与该类别关联的那些表中获取所有值。
CREATE OR REPLACE PROCEDURE select_record(category_name IN VARCHAR2)
AS
type tableaarray IS VARRAY(20) OF VARCHAR2(20);
tables_names tableaarray;
total integer;
result SYS_REFCURSOR;
BEGIN
IF category_name = 'jobs' THEN
tables_names := tableaarray('categories');
ELSIF category_name = 'alert' THEN
tables_names := tableaarray('alert_demo');
END IF;
total := tables_names.count;
FOR i in 1 .. total LOOP
result := get_results(tables_names(i));
END LOOP;
END;
现在问题出在循环中。我无法显示循环中的输出。这种方法可能不对。我是plsql的新手。请给我一些想法,我该怎么做。
解决方案
这对我来说真的是一种反模式。您正在SELECT *
光标中进行操作,因此您将为每个表名返回不同的列列表。
为什么要这样做,而不是从您感兴趣的表中实际选择所需的列?
如果您真的必须这样做,我建议您使用DBMS_SQL包执行动态 SQL。这是一个相当复杂的事情,你说你是 PL/SQL 的新手,所以,我不知道......
推荐阅读
- python - 在 pandas/python3 之前转换命名聚合
- c++ - 从派生类初始化构造函数的问题
- javascript - 如何在调整大小时关闭滑入式导航栏?
- python - 即使我将变量设置为重新启动它,循环也不会重新启动
- git - 是否有命令将一棵 gitignore 树“卷起”到一个父 gitignore 中?
- kubernetes - 使用 helm 升级(部署 + PVC)到 Statefulset
- mysql - 对于按主键排序时的 Mysql ORDER BY LIMIT 查询,我需要复合索引吗?
- flutter - Fultter GridView 滚动
- mysql - 选择数据时至少过滤一个空记录
- docker - 如何访问历史泊坞窗'
' 图片