【发布时间】:2013-11-02 21:32:41
【问题描述】:
帮我解决这个错误
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 为
PROCEDURE final_procedure(var1 in varchar2, dbinfo out varchar2);
END final_package;
/
创建或替换包体 final_package 是
PROCEDURE final_procedure(var1 in varchar2, dbinfo out varchar2) IS开始
IF var1 = 'a'
------ /* 获取表空间名称,百分比 */ ----
那么
声明
tsinfo varchar2(5000); ---- /* 我想把表空间结果放到 这个 tsinfo */----
CURSOR tbsp is select a.TABLESPACE_NAME as
表空间,round((1-((a.BYTES-nvl(b.BYTES,0))/a.BYTES))*100,2)
作为
百分比来自 (select TABLESPACE_NAME, sum(BYTES) BYTES from
sys.dba_data_files group by TABLESPACE_NAME) a,
(选择
TABLESPACE_NAME, sum(BYTES) BYTES 来自 sys.dba_free_space
分组
TABLESPACE_NAME) b
在哪里
a.TABLESPACE_NAME = b.TABLESPACE_NAME (+)
按 ((a.BYTES-b.BYTES)/a.BYTES) desc 排序;
开始
对于 tbsp 中的 each_data1
循环
FETCH tbsp INTO tsinfo; --- /* 我想把表空间结果放到 这个 tsinfo */ ---
结束循环;
关闭汤匙;
结束;
---- /* 获取数据库锁定状态 */ ----
ELSIF var1 = 'b' 那么
声明
lockinfo varchar2(1500);
CURSOR lock_info 是 SELECT vh.sid lock_sid,
vw.sid waiter_sid,
vs.status 状态,
vs.program program_holding,
vsw.program program_waiting
来自 v$lock vh,
v$lock vw,
v$session 对比,
v$session vsw
WHERE(vh.id1, vh.id2) IN (SELECT id1, id2
来自 v$lock
WHERE 请求 = 0
相交
选择 id1,id2
来自 v$lock
在哪里 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;
开始
for each_data in lock_info
循环
FETCH lock_info INTO lockinfo; -- 我想把数据库锁定结果 到这个tsinfo
结束循环;
关闭 lock_info;
结束;
如果结束;
结束;
结束;
/
【问题讨论】: