首页 > 解决方案 > 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的新手。请给我一些想法,我该怎么做。

标签: oracleplsqloracle11g

解决方案


这对我来说真的是一种反模式。您正在SELECT *光标中进行操作,因此您将为每个表名返回不同的列列表。

为什么要这样做,而不是从您感兴趣的表中实际选择所需的列?

如果您真的必须这样做,我建议您使用DBMS_SQL包执行动态 SQL。这是一个相当复杂的事情,你说你是 PL/SQL 的新手,所以,我不知道......


推荐阅读