这个函数将返回我发送的表中的所有行作为参数
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的新手。请告诉我如何做到这一点。
答案 0 :(得分:0)
这对我来说真的像是反模式。您在光标中执行了SELECT *
,因此您需要为每个表名返回不同的列列表。
为什么这样做而不是从您感兴趣的表格中实际选择所需的列?
如果你真的必须这样做,我建议用DBMS_SQL包做动态SQL。这是一件相当复杂的事情,你说你是PL / SQL的新手,所以,我不知道......