如何在pl / sql中将游标值提取到varchar2中

时间:2013-10-24 09:03:56

标签: oracle plsql oracle11g

帮我解决这个错误

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_data1      

LOOP

     

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;

     

/

1 个答案:

答案 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

格式化非常糟糕,我决定不扫描代码中的其他错误。