我需要从任何表中获取数据(表名作为参数传递给过程)。我正在尝试使用批量收集光标,它工作得非常好。但是,表名必须仅用作对象,而不是表名(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;