问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

个税系统申报时出现2107:执行存储过程/SQL语句出错(2107):ORA-06533:subs

发布网友 发布时间:2022-04-13 17:32

我来回答

2个回答

懂视网 时间:2022-04-13 21:53

VARRAY是在Oracle8G的时候引入的一个类型,是一种密集填充数组,更容易被理解成为一个传统的数组。在创建这些数组的时候,都有一

VARRAY是在Oracle8G的时候引入的一个类型,是一种密集填充数组,,更容易被理解成为一个传统的数组。在创建这些数组的时候,都有一个尺寸,需要非常注意的是VARRAY的下表是从1开始的,在其他很多变成语言中,数组的下表都是从0开始的,比如JAVA。在实际的使用中,初学者经常会出现如下的错误提示:

ORA-06533:下表超出数量

例如下面的代码就会出现该错误:

DECLARE
TYPE NUM_VARRAY IS VARRAY(100) OF NUMBER NOT NULL;
V_NUM_VARRAY NUM_VARRAY:=NUM_VARRAY();
BEGIN
FOR J IN 1 .. 100 LOOP
V_NUM_VARRAY(J) := J;
END LOOP;
FOR I IN 1 .. V_NUM_VARRAY.COUNT LOOP
DBMS_OUTPUT.PUT_LINE(TO_CHAR(V_NUM_VARRAY(I)));
END LOOP;
END;

这个错误的原因是什么呢?我们定义了一个为空的VARRAY,在第一个J循环的时候,将1赋值给V_NUM_ARRAY(1),但是因为实际上,该集合变量并没有存储空间,因此PL/SQL就会报一个“下表超出数量”的错误。

如何去解决这个问题呢?查阅Oracle 的MOS 找到了如下描述:

EXTEND Collection Method

EXTEND is a procedure that adds elements to the end of a varray or nested table. The collection can be empty, but not null. (To make a collection empty or add elements to a null collection, use a constructor. For more information, see .)

The EXTEND method has these forms:

  • EXTEND appends one null element to the collection.

  • EXTEND(n) appends n null elements to the collection.

  • EXTEND(n,i) appends n copies of the ith element to the collection.

    Note:

    EXTEND(n,i) is the only form that you can use for a collection whose elements have the NOT NULL constraint.

  • EXTEND operates on the internal size of a collection. That is, if DELETE deletes an element but keeps a placeholder for it, then EXTEND considers the element to exist.

    declares a nested table variable, initializing it with three elements; appends two copies of the first element; deletes the fifth (last) element; and then appends one null element. Because EXTEND considers the deleted fifth element to exist, the appended null element is the sixth element. The procedureprint_nt prints the nested table variable after initialization and after the EXTEND and DELETE operations. The type nt_type and procedure print_nt are defined in.

    Example 5-20 EXTEND Method with Nested Table

    DECLARE nt nt_type := nt_type(11, 22, 33); BEGIN print_nt(nt); nt.EXTEND(2,1); -- Append two copies of first element print_nt(nt); nt.DELETE(5); -- Delete fifth element print_nt(nt); nt.EXTEND; -- Append one null element print_nt(nt); END; /

    Result:

    nt.(1) = 11 nt.(2) = 22 nt.(3) = 33 --- nt.(1) = 11 nt.(2) = 22 nt.(3) = 33 nt.(4) = 11 nt.(5) = 11 --- nt.(1) = 11 nt.(2) = 22 nt.(3) = 33 nt.(4) = 11 --- nt.(1) = 11 nt.(2) = 22 nt.(3) = 33 nt.(4) = 11 nt.(6) = NULL ---

    上面的大意是:

    EXTEND方法为VARRAY或者NESTED TABLE集合中的一个或者多个新元素分配存储空间。有两个可以选择的选项,默认情况下,是它在向集合添加值之前的时候,为该值分配存储空间。他的两个参数的意思分别是,第一个参数是增加多少个元素的空间,第二个参数的意思是引用集合中已经存在的元素的索引,该元素就会被复制到新的元素上。

    上面出错的代码修改为如下可以正常运行了:

    DECLARE
    TYPE NUM_VARRAY IS VARRAY(100) OF NUMBER NOT NULL;
    V_NUM_VARRAY NUM_VARRAY:=NUM_VARRAY();
    BEGIN
    FOR J IN 1 .. 100 LOOP
    V_NUM_VARRAY.EXTEND;
    V_NUM_VARRAY(J) := J;
    END LOOP;
    FOR I IN 1 .. V_NUM_VARRAY.COUNT LOOP
    DBMS_OUTPUT.PUT_LINE(TO_CHAR(V_NUM_VARRAY(I)));
    END LOOP;
    END;

    linux

    热心网友 时间:2022-04-13 19:01

    检测数据库配置文件!执行出错 其一在数据库操作语法, 其二便在数据库配置信息!采用排除法 重新建立一个demo文件检测测试数据库连接状态。确保无误后检测操作文件中的执行语句(个税--SQl)具体语法参考SQL!
    声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
    坟前栽什么果树最旺 【梅子树】梅子树介绍 梅子树的栽培技术 梅子树的生长条件是什么_百 ... ...最亲近的人态度不好,对待别人反而挺不错的? 为了孩子凑合过对男人来说有意义吗 郑州最大汽配城排名 东莞有多少个汽配城 “我的心想改变,我的泪在缠绵”是哪首歌的歌词 我的脸化妆品过敏怎么办,有什么办法 华为手表gt2怎么自定义表盘壁纸华为手表gt2怎么自定义表盘壁纸 杰伦《彩虹》歌词 一个月婴儿睡觉不踏实,手脚总是动来动去的,姐妹们告诉我是不是缺钙? 新生儿经常出现手脚乱蹬,是什么原因造成的? 新生儿手脚颤抖是怎么回事 新生儿手脚偶尔有规律抖动,请问正常吗 刚出生十几天的婴儿双手时常连续抖动几次是怎么回事 新生儿经常憋气发力,手脚乱蹬,这正常吗? 新生儿睡觉时胳膊和腿总是连续抖动,是怎么回事呢? 我家宝宝生下来53天了,可是他平时总是手舞足蹈的(手不停动,脚直蹬),这是正常的吗? 四川省开江以后会通高铁吗 四川达州市开江县一共有多少个镇? 四川达州开江这座小县城,有哪些优势? 四川达州开江县大不大 四川省达州市开江县邮编号码 开江县是哪个市 四川省达州市开江县和大竹县开江是同一个地方吗 去韩国的话必带哪些单品呢 达州市开江县是否属于贫困地区 四川开江县和重庆开州区,名字为何都带个“开”字? 支持支付宝退税的机场有哪些? 四川省开江县总人口有多少 电瓶车胎压和汽车胎压区别 电瓶车轮子被扎了,带一个打气筒打气备用好?还是买个助推器好? 能用汽车轮胎打气的气泵给电瓶车打气吗 车载充气泵充电动车轮胎调多少? 汽车的轮胎为什么要充气 北京地区桃树一年大概分几个时期,都什么时间? 例如开花期等?? 罗技G403和最新出的G603有什么区别 罗技G500与罗技G400有什么区别吗? 罗技G430和罗技G930有什么区别 罗技G403和G402有什么区别? 罗技g 602和罗技g600比较 有什么差别?选择哪个好 ORACLE PL/SQL总是提示第一行出现错误 实际返回的行数超出请求的行数 微信支付绑银行卡提示银行卡状态不正确,说我卡有问题 微信支付绑定银行卡提示您的银行卡状态不正确,但是我的卡正常可以用啊 微信支付绑银行卡提示您的银行卡状态不正确,但是我的卡正常可以用啊 微信支付提示您的银行卡状态不正确,说我卡有问题 格力直流变频中央空调制热效果差怎么办 鼠标怎么调移动速度 什么叫做企业破产 我这个跨表查询错在哪里啊?pl/sql里面报ora-00913:值过多