帮我解决这个错误
29/5 PL / SQL:忽略SQL语句
29/5 PLS-00394:FETCH的INTO列表中的值数错误 声明
(29是FETCH tbsp INTO tsinfo;)
62/5 PL / SQL:忽略SQL语句
62/5 PLS-00394:FETCH的INTO列表中的值数错误 声明
(62是FETCH lock_info INTO lockinfo; - 我想将数据库锁定结果放到此tsinfo中)
创建或替换包裹final_package为
程序final_procedure(varchar2中的var1,varbin2中的dbinfo);
END final_package;
/
创建或替换包装身体final_package IS
PROCEDURE final_procedure(var1 in varchar2, dbinfo out varchar2) IS
BEGIN
IF var1 ='a'
------ / *获取表空间名称,百分比* / ----
THEN
DECLARE
tsinfo varchar2(5000); ---- / *我想把表空间结果放到 这个tsinfo * / ----
CURSOR tbsp选择a.TABLESPACE_NAME为
表空间,圆形((1 - ((a.BYTES-NVL(b.BYTES,0))/ a.BYTES))* 100,2)
AS
来自(选择TABLESPACE_NAME,总和(BYTES)BYTES的百分比
由TABLESPACE_NAME提供的sys.dba_data_files小组)a,
(选择
TABLESPACE_NAME,来自sys.dba_free_space的总和(BYTES)BYTES
分组
TABLESPACE_NAME)b
,其中
a.TABLESPACE_NAME = b.TABLESPACE_NAME(+)
按顺序排列((a.BYTES-b.BYTES)/a.BYTES)desc;
BEGIN
for t_
中的each_data1LOOP
FETCH tbsp INTO tsinfo; --- / *我想把表空间结果放到 这个tsinfo * / ---
END LOOP;
关闭tbsp;
END;
---- / *获取数据库锁定状态* / ----
ELSIF var1 ='b'那么
DECLARE
lockinfo varchar2(1500);
CURSOR lock_info是SELECT vh.sid locking_sid,
vw.sid waiter_sid,
vs.status status,
vsprogram program_holding,
vsw.program program_waiting
FROM v $ lock vh,
v $ lock vw,
v $ session vs,
v $ session vsw
WHERE(vh.id1,vh.id2)IN(SELECT id1,id2
FROM v $ lock
WHERE request = 0
INTERSECT
SELECT id1,id2
FROM v $ lock
WHERE lmode = 0)
AND vh.id1 = vw.id1
AND vh.id2 = vw.id2
AND vh.request = 0
AND vw.lmode = 0
AND vh.sid = vs.sid
AND vw.sid = vsw.sid;
BEGIN
对于lock_info中的each_data
LOOP
FETCH lock_info INTO lockinfo; - 我想放数据库锁定结果 到这个tsinfo
END LOOP;
关闭lock_info;
END;
END IF;
END;
END;
/
答案 0 :(得分:1)
光标tbsp选择2个值:
CURSOR tbsp is
select a.TABLESPACE_NAME as Tablespace,
round((1-((a.BYTES-nvl(b.BYTES,0))/a.BYTES))*100,2) AS Percentages
您需要FETCH
为2个变量(或者包含2个字段的记录)。
FETCH tbsp INTO tsinfo, percentage; -- You need to declare percentage
格式化非常糟糕,我决定不扫描代码中的其他错误。