create or replace procedure SP_INT is
--记数器
rowlimit integer;
--定义类型
TYPE TYPE_ROW IS RECORD
(
aaaa VARCHAR2(30),
bbbb CHAR(1)
);
TYPE TYPE_TAB IS TABLE OF TYPE_ROW; --定义v_tab为TYPE_TAB
v_tab TYPE_TAB;
--定义请求接口表游标
CURSOR CUR_INT is SELECT A.aaaa,C.bbbb FROM A
left join B on (A.id = c.id);
BEGIN
rowlimit:=1000;
OPEN CUR_INT;
LOOP
--定义1000条
FETCH CUR_INT BULK COLLECT INTO v_tab LIMIT rowlimit;
FOR i IN 1..v_tab.COUNT
SELECT aaaa into v_a from a;
LOOP
END LOOP;
--关闭游标
EXIT WHEN CUR_INT%notfound;
END LOOP;
END;
---这样的过程,老提示v_tab 类型错误。不是写法有问题,还是不能这样写。
各位帮忙看看。
--记数器
rowlimit integer;
--定义类型
TYPE TYPE_ROW IS RECORD
(
aaaa VARCHAR2(30),
bbbb CHAR(1)
);
TYPE TYPE_TAB IS TABLE OF TYPE_ROW; --定义v_tab为TYPE_TAB
v_tab TYPE_TAB;
--定义请求接口表游标
CURSOR CUR_INT is SELECT A.aaaa,C.bbbb FROM A
left join B on (A.id = c.id);
BEGIN
rowlimit:=1000;
OPEN CUR_INT;
LOOP
--定义1000条
FETCH CUR_INT BULK COLLECT INTO v_tab LIMIT rowlimit;
FOR i IN 1..v_tab.COUNT
SELECT aaaa into v_a from a;
LOOP
END LOOP;
--关闭游标
EXIT WHEN CUR_INT%notfound;
END LOOP;
END;
---这样的过程,老提示v_tab 类型错误。不是写法有问题,还是不能这样写。
各位帮忙看看。
帮个忙啦。
TYPE TYPE_ROW IS RECORD
(
aaaa VARCHAR2(30),
bbbb CHAR(1)
);
TYPE TYPE_TAB IS TABLE OF TYPE_ROW; --定义v_tab为TYPE_TAB
v_tab TYPE_TAB;
--定义请求接口表游标
CURSOR CUR_INT is SELECT A.aaaa,C.bbbb FROM A
left join B on (A.id = c.id);
这两个的定义是完全一样的,大家可以把A,B表替换掉看看。
就这么几句语句,你竟然能搞出10个错误,这也是本事。 :)
修改后:
CREATE OR REPLACE PROCEDURE SP_INT IS
ROWLIMIT INTEGER;
TYPE TYPE_ROW IS RECORD(
AAAA VARCHAR2(30),
BBBB CHAR(1));
TYPE TYPE_TAB IS TABLE OF TYPE_ROW;
V_TAB TYPE_TAB;
CURSOR CUR_INT IS
SELECT A.AAAA, C.BBBB FROM A LEFT JOIN B ON (A.ID = C.ID);
BEGIN
ROWLIMIT := 1000;
OPEN CUR_INT;
LOOP
FETCH CUR_INT BULK COLLECT
INTO V_TAB LIMIT ROWLIMIT;
FOR I IN 1 .. V_TAB.COUNT LOOP
/* SELECT AAAA INTO V_A FROM A;
LOOP
END LOOP;*/
NULL;
END LOOP;
EXIT WHEN CUR_INT%NOTFOUND;
END LOOP;
CLOSE CUR_INT;
END;
/
好象就2个错误吧?一个是select 没写在LOOP,一个是没CLOSE 游标
我用你的SQL,也是一样的错哦。
就一个‘INTO 列表中的表达式 'V_TAB' 类型错误 ’吧?
主要的还是这个错啦?
您老,能帮在看看先。
呵呵。
rowlimit integer;
TYPE TYPE_ROW IS RECORD
(
aaaa VARCHAR2(30),
bbbb CHAR(1)
);
TYPE TYPE_TAB IS TABLE OF TYPE_ROW;
v_tab TYPE_TAB;
CURSOR CUR_INT is SELECT A.aaaa,C.bbbb FROM A
left join B on (A.id = c.id);
BEGIN
rowlimit:=1000;
OPEN CUR_INT;
LOOP
FETCH CUR_INT BULK COLLECT INTO v_tab LIMIT rowlimit;
FOR i IN 1..v_tab.COUNT
LOOP
NULL;
END LOOP;
EXIT WHEN CUR_INT%notfound;
END LOOP;
CLOSE CUR_INT
END;/*INTO 列表中的表达式 'V_TAB' 类型错误 这个问题啦,A,B表大家随便拿别的表代替*/