我们的DBA要求我们从一组关联数组中返回存储过程中的所有表格数据,而不是使用我在Web上大多数示例中看到的引用游标。他说,这是因为Oracle以这种方式做事要快得多,但对我来说这似乎不直观,因为数据需要循环两次,一次在存储过程中,另一次在应用程序中进行处理。此外,值通常需要从其本地类型转换为varchar,以便它们可以存储在数组中,然后在应用程序端进行回滚。使用这种方法也使得使用orm工具变得困难,因为他们似乎在大多数情况下都需要引用游标。Oracle存储过程,返回引用游标与关联数组
的存储过程的一个例子是下面的:
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开发人员)以这种方式编写存储过程吗?
谢谢。多么好,详细的答案!如果可以的话,我会给你两张票。 – zaq 2012-03-09 20:47:54