Oracle存储过程将返回表中的所有数据

时间:2018-05-31 12:56:04

标签: oracle plsql oracle11g

这个函数将返回我发送的表中的所有行作为参数

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的新手。请告诉我如何做到这一点。

1 个答案:

答案 0 :(得分:0)

这对我来说真的像是反模式。您在光标中执行了SELECT *,因此您需要为每个表名返回不同的列列表。

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

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