【问题标题】:how to fetch cursor value into varchar2 in pl/sql如何在pl/sql中将游标值提取到varchar2中
【发布时间】: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;

结束;

如果结束;

结束;

结束;

/

【问题讨论】:

    标签: oracle plsql oracle11g


    【解决方案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
    

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

    【讨论】:

    • @Klas Lindbäck 先生,我想将 fetch 值设置为 out parapeter 我该怎么做?
    • 您需要添加另一个输出参数或连接两个值(使用|| 连接字符串)。
    • 它可以转换成单个 varchar2 变量吗?比如将光标转成json字符串?
    猜你喜欢
    • 1970-01-01
    • 2012-10-03
    • 1970-01-01
    • 1970-01-01
    • 2018-09-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-12-13
    相关资源
    最近更新 更多