从巨大的表

时间:2017-02-09 16:11:26

标签: sql oracle

我需要从任何表中获取数据(表名作为参数传递给过程)。我正在尝试使用批量收集光标,它工作得非常好。但是,表名必须仅用作对象,而不是表名(varchar)。如何从表名创建表类型?在通过光标选择数据之后,它们必须存储在某处(在表中不能创建为Above)。

因此,问题在于从表名创建表类型。你能帮助我吗?或者可能还有其他/更好的解决方案?

编辑(我正在添加在网上找到的代码并稍微更改一下)。

如您所见,我正在传递tableName参数。我可以使用表名来调用游标:OPEN c_data用于' select * from' || tableName;但是我无法从表名创建类型:TYPE t_bulk_collect_test_tab IS TABLE OF产品%ROWTYPE; 在这个(第二个例子中我使用的表名没有通过参数传递,称为产品)。我想在这里使用参数(tableName)。

 create or replace procedure Procedure1 (limit_in IN PLS_INTEGER DEFAULT 100, tableName in VARCHAR2)
as
begin

 DECLARE
  TYPE t_bulk_collect_test_tab IS TABLE OF product%ROWTYPE;

  l_tab    t_bulk_collect_test_tab;
c_data sys_refcursor;

BEGIN
  OPEN c_data for 'select * from '||tableName ;
  LOOP
      FETCH c_data
    BULK COLLECT INTO l_tab LIMIT limit_in;
EXIT WHEN l_tab.count = 0;

    DBMS_OUTPUT.put_line(l_tab.count || 'rows');

  END LOOP
  CLOSE;
END;

exception
when others then
  raise;
end Procedure1;

0 个答案:

没有答案