1

帮我解决这个错误

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);

结束 final_package;

/

创建或替换包体 final_package 是

 PROCEDURE final_procedure(var1 in varchar2, dbinfo out varchar2) IS

开始

如果 var1 = 'a'

------ /* 获取表空间名称,百分比 */ ----

然后

宣布

tsinfo varchar2(5000); ---- /* 我想把表空间结果放到这个 tsinfo */----

CURSOR tbsp 是选择 a.TABLESPACE_NAME 作为

表空间,round((1-((a.BYTES-nvl(b.BYTES,0))/a.BYTES))*100,2)

作为

百分比来自 (select TABLESPACE_NAME, sum(BYTES) BYTES from

sys.dba_data_files 按 TABLESPACE_NAME 分组) a,

(选择

TABLESPACE_NAME, sum(BYTES) BYTES 来自 sys.dba_free_space

通过...分组

表空间名称)b

在哪里

a.TABLESPACE_NAME = b.TABLESPACE_NAME (+)

按 ((a.BYTES-b.BYTES)/a.BYTES) desc 排序;

开始

FOR each_data1 in tbsp

环形

将 tbsp 提取到 tsinfo 中;--- /* 我想把表空间结果放到这个 tsinfo */ ---

结束循环;

关闭汤匙;

结尾;

---- /* 获取数据库锁定状态 */ ----

ELSIF var1 = 'b' 那么

宣布

锁定信息 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$锁定大众,

v$会话与,

v$会话vsw

在哪里(vh.id1,vh.id2)在(选择 id1,id2

来自 v$lock

WHERE 请求 = 0

相交

选择 id1,id2

来自 v$lock

其中 lmode = 0)

和 vh.id1 = vw.id1

和 vh.id2 = vw.id2

和 vh.request = 0

和 vw.lmode = 0

和 vh.sid = vs.sid

和 vw.sid = vsw.sid;

开始

FOR lock_info 中的 each_data

环形

FETCH lock_info INTO lockinfo; -- 我想把数据库锁定结果放到这个 tsinfo

结束循环;

关闭 lock_info;

结尾;

万一;

结尾;

结尾;

/

4

1 回答 1

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

格式太可怕了,我决定不扫描代码以查找其他错误。

于 2013-10-24T09:12:03.033 回答