search
HomeDatabaseMysql TutorialPL/SQL中集合出现“ORA-06533:下表超出数量”的问题解决

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

    Statement
    The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn
    What Are the Limitations of Using Views in MySQL?What Are the Limitations of Using Views in MySQL?May 14, 2025 am 12:10 AM

    MySQLviewshavelimitations:1)Theydon'tsupportallSQLoperations,restrictingdatamanipulationthroughviewswithjoinsorsubqueries.2)Theycanimpactperformance,especiallywithcomplexqueriesorlargedatasets.3)Viewsdon'tstoredata,potentiallyleadingtooutdatedinforma

    Securing Your MySQL Database: Adding Users and Granting PrivilegesSecuring Your MySQL Database: Adding Users and Granting PrivilegesMay 14, 2025 am 12:09 AM

    ProperusermanagementinMySQLiscrucialforenhancingsecurityandensuringefficientdatabaseoperation.1)UseCREATEUSERtoaddusers,specifyingconnectionsourcewith@'localhost'or@'%'.2)GrantspecificprivilegeswithGRANT,usingleastprivilegeprincipletominimizerisks.3)

    What Factors Influence the Number of Triggers I Can Use in MySQL?What Factors Influence the Number of Triggers I Can Use in MySQL?May 14, 2025 am 12:08 AM

    MySQLdoesn'timposeahardlimitontriggers,butpracticalfactorsdeterminetheireffectiveuse:1)Serverconfigurationimpactstriggermanagement;2)Complextriggersincreasesystemload;3)Largertablesslowtriggerperformance;4)Highconcurrencycancausetriggercontention;5)M

    MySQL: Is it safe to store BLOB?MySQL: Is it safe to store BLOB?May 14, 2025 am 12:07 AM

    Yes,it'ssafetostoreBLOBdatainMySQL,butconsiderthesefactors:1)StorageSpace:BLOBscanconsumesignificantspace,potentiallyincreasingcostsandslowingperformance.2)Performance:LargerrowsizesduetoBLOBsmayslowdownqueries.3)BackupandRecovery:Theseprocessescanbe

    MySQL: Adding a user through a PHP web interfaceMySQL: Adding a user through a PHP web interfaceMay 14, 2025 am 12:04 AM

    Adding MySQL users through the PHP web interface can use MySQLi extensions. The steps are as follows: 1. Connect to the MySQL database and use the MySQLi extension. 2. Create a user, use the CREATEUSER statement, and use the PASSWORD() function to encrypt the password. 3. Prevent SQL injection and use the mysqli_real_escape_string() function to process user input. 4. Assign permissions to new users and use the GRANT statement.

    MySQL: BLOB and other no-sql storage, what are the differences?MySQL: BLOB and other no-sql storage, what are the differences?May 13, 2025 am 12:14 AM

    MySQL'sBLOBissuitableforstoringbinarydatawithinarelationaldatabase,whileNoSQLoptionslikeMongoDB,Redis,andCassandraofferflexible,scalablesolutionsforunstructureddata.BLOBissimplerbutcanslowdownperformancewithlargedata;NoSQLprovidesbetterscalabilityand

    MySQL Add User: Syntax, Options, and Security Best PracticesMySQL Add User: Syntax, Options, and Security Best PracticesMay 13, 2025 am 12:12 AM

    ToaddauserinMySQL,use:CREATEUSER'username'@'host'IDENTIFIEDBY'password';Here'showtodoitsecurely:1)Choosethehostcarefullytocontrolaccess.2)SetresourcelimitswithoptionslikeMAX_QUERIES_PER_HOUR.3)Usestrong,uniquepasswords.4)EnforceSSL/TLSconnectionswith

    MySQL: How to avoid String Data Types common mistakes?MySQL: How to avoid String Data Types common mistakes?May 13, 2025 am 12:09 AM

    ToavoidcommonmistakeswithstringdatatypesinMySQL,understandstringtypenuances,choosetherighttype,andmanageencodingandcollationsettingseffectively.1)UseCHARforfixed-lengthstrings,VARCHARforvariable-length,andTEXT/BLOBforlargerdata.2)Setcorrectcharacters

    See all articles

    Hot AI Tools

    Undresser.AI Undress

    Undresser.AI Undress

    AI-powered app for creating realistic nude photos

    AI Clothes Remover

    AI Clothes Remover

    Online AI tool for removing clothes from photos.

    Undress AI Tool

    Undress AI Tool

    Undress images for free

    Clothoff.io

    Clothoff.io

    AI clothes remover

    Video Face Swap

    Video Face Swap

    Swap faces in any video effortlessly with our completely free AI face swap tool!

    Hot Article

    Hot Tools

    SublimeText3 Linux new version

    SublimeText3 Linux new version

    SublimeText3 Linux latest version

    SecLists

    SecLists

    SecLists is the ultimate security tester's companion. It is a collection of various types of lists that are frequently used during security assessments, all in one place. SecLists helps make security testing more efficient and productive by conveniently providing all the lists a security tester might need. List types include usernames, passwords, URLs, fuzzing payloads, sensitive data patterns, web shells, and more. The tester can simply pull this repository onto a new test machine and he will have access to every type of list he needs.

    ZendStudio 13.5.1 Mac

    ZendStudio 13.5.1 Mac

    Powerful PHP integrated development environment

    DVWA

    DVWA

    Damn Vulnerable Web App (DVWA) is a PHP/MySQL web application that is very vulnerable. Its main goals are to be an aid for security professionals to test their skills and tools in a legal environment, to help web developers better understand the process of securing web applications, and to help teachers/students teach/learn in a classroom environment Web application security. The goal of DVWA is to practice some of the most common web vulnerabilities through a simple and straightforward interface, with varying degrees of difficulty. Please note that this software

    Notepad++7.3.1

    Notepad++7.3.1

    Easy-to-use and free code editor