【发布时间】:2015-03-04 21:57:46
【问题描述】:
以下是示例场景
CURSOR cur
IS
SELECT Comments,
Assignee,
Case_Info,
Users
FROM sometable
where id=:id
OPEN cur
LOOP
v_comments := NULL;
v_assignee := NULL;
v_case_info := NULL;
v_users := NULL;
FETCH cur INTO v_comments, v_assignee, v_case_info, v_users;
EXIT
/* here lopping through each row and get non-null Comments,Assignee,Case_Info,Users values and return one row */
END LOOP;
CLOSE cv_mng_data;
整个代码都在一个函数中,用于与另一个表连接。这会导致性能问题。我想知道其他方法来做到这一点
【问题讨论】:
-
“这会导致性能问题。我想知道其他方法来做到这一点” - 不要使用光标......
-
在我给出的示例中,我必须遍历每条记录以找出非空注释、case_info、assignee.. 所以我使用了游标。请告诉我我们可以使用哪些其他方法来解决这个问题
-
在
SQL做,不需要PL/SQL。 -
是的,在 SQL 中执行以避免频繁的上下文切换。这些对性能有很大的影响。如果您确实需要 PL/SQL 进行转换,请考虑使用 BULK COLLECT 和 FORALL 来减少上下文切换的数量。