【发布时间】:2018-08-20 10:31:32
【问题描述】:
我想创建一个使用游标的过程,这对于任意表都是一样的。我现在的样子是这样的:
create or replace
PROCEDURE
some_name(
p_talbe_name IN VARCHAR2,
p_chunk_size IN NUMBER,
p_row_limit IN NUMBER
) AS
CURSOR v_cur IS
SELECT common_column,
ora_hash(substr(common_column, 1, 15), p_chunk_size) as chunk_number
-- Here it can find the table!
FROM p_table_name;
TYPE t_sample IS TALBE OF v_cur%rowtype;
v_sample t_sample;
BEGIN
OPEN v_cur;
LOOP FETCH v_cur BULK COLLECT INTO v_sample LIMIT p_row_limit;
FORALL i IN v_sample.first .. v_sample.last
INSERT INTO chunks VALUES v_sample(i);
COMMIT;
EXIT WHEN v_cur%notfound;
END LOOP;
CLOSE v_cur;
END;
问题是它找不到我想要参数化的名为p_table_name 的表。问题是我需要基于存在于所有预期表中的common_column 的散列创建块。如何处理这个问题?也许有等效的 oracle 代码可以做同样的事情?然后我需要同样的查询效率。谢谢!
【问题讨论】:
-
为什么在将数据插入表之前循环并将数据拉入数组,而不仅仅是动态插入选择?这是某种家庭作业,您在实现目标的方式上受到人为限制,还是有其他原因?
-
@Boneist 不,我对解决方案没有任何限制。我只需要一个高效的。这段代码实际上是更大的 sql 的一部分,我试图通过提取可重用的过程来重构它。