【发布时间】:2012-03-27 05:36:42
【问题描述】:
我们的 DBA 要求我们从一组关联数组中的存储过程中返回所有表格数据,而不是使用我在网络上大多数示例中看到的引用游标。他说这是因为 Oracle 以这种方式做事要快得多,但对我来说这似乎违反直觉,因为数据需要循环两次,一次在存储过程中,然后在处理时再次在应用程序中。此外,通常需要将值从其本机类型转换为 varchar,以便将它们存储在数组中,然后在应用程序端进行转换。使用这种方法也使得使用 orm 工具变得困难,因为它们似乎在大多数情况下都需要引用游标。
一个存储过程的例子如下:
PROCEDURE sample_procedure (
p_One OUT varchar_array_type,
p_Two OUT varchar_array_type,
p_Three OUT varchar_array_type,
p_Four OUT varchar_array_type
)
IS
p_title_procedure_name VARCHAR2(100) := 'sample_procedure';
v_start_time DATE :=SYSDATE;
CURSOR cur
IS
SELECT e.one, e.two, e.three, e.four FROM package.table
WHERE filter='something';
v_counter PLS_INTEGER := 0;
BEGIN
FOR rec IN cur LOOP
BEGIN
v_counter := v_counter + 1;
p_One(v_counter) := rec.one;
p_Two(v_counter) := rec.two;
p_Three(v_counter) := rec.three;
p_Four(v_counter) := rec.four;
END;
END LOOP;
END;
光标用于为返回的每一列填充一个数组。我试图找到支持他的说法的信息,即这是一种更快的方法,但一直无法做到。谁能告诉我他为什么希望我们(.net 开发人员)以这种方式编写存储过程?
【问题讨论】:
标签: arrays oracle plsql oracle11g