[英]How to put result of a query inside a loop in a Cursor in a PL SQL procedure?
I have to use the data from a clob to do a query in a loop and store the result of each query in a cursor. 我必须使用Clob中的数据来循环执行查询,并将每个查询的结果存储在游标中。 However i am not sure how/where to open a cursor.
但是我不确定如何/在哪里打开游标。 If i do it in a loop then i assume only the last query's data will be present.
如果我在循环中执行此操作,则我假设将仅显示最后一个查询的数据。
What is the way to go in such a situation. 在这种情况下该走什么路。
This is what I am trying to achieve : 这是我要实现的目标:
https://www.mkyong.com/jdbc/jdbc-callablestatement-stored-procedure-cursor-example/ https://www.mkyong.com/jdbc/jdbc-callablestatement-stored-procedure-cursor-example/
PROCEDURE PRC(
P_DATE IN VARCHAR,
P_CLOB IN CLOB,
P_CUR OUT SYS_REFCURSOR
) IS
V_DATE DATE;
V_STR VARCHAR;
BEGIN
V_DATE := TO_DATE(P_DATE, 'DD/MM/YYYY');
V_CLOB_LENGTH := DBMS_LOB.getlength(P_CLOB);
V_START_CHAR := 1;
V_LEN := 5;
WHILE (V_START_CHAR + V_LEN) <= V_CLOB_LENGTH
LOOP
V_STR := SUBSTR(
P_CLOB,
V_START_CHAR,
V_LEN
);
V_START_CHAR := V_START_CHAR + V_LEN;
OPEN P_CUR FOR /* I know this is wrong */
SELECT A , B, C
FROM TAB
WHERE DATE = V_DATE
AND COL = V_STR;
END LOOP;
END PRC;
If I were you, I'd do the chunking up of the clob in a query and then you can simply join that to your table - something like: 如果我是你,我将在查询中对Clob进行分块,然后可以将其简单地连接到表中-类似于:
PROCEDURE PRC(P_DATE IN VARCHAR,
P_CLOB IN CLOB,
P_CUR OUT SYS_REFCURSOR)
IS
v_length constant number := 5;
BEGIN
OPEN p_cur FOR
SELECT tab.a,
tab.b,
tab.c
FROM tab
INNER JOIN (SELECT to_char(p_date, 'dd/mm/yyyy') dt,
dbms_lob.SUBSTR(p_clob, v_length, (LEVEL - 1)*v_length + 1) substring
FROM dual
CONNECT BY dbms_lob.SUBSTR(p_clob, v_length, (LEVEL - 1)*v_length + 1) IS NOT NULL) str
ON tab.dt = str.dt
AND tab.col = str.substring;
END prc;
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.