record and table

    技术2022-06-09  57

    1.1 PL/SQL record

        Records are composed of a group of fields, similar to the columns in a row. The %ROWTYPE attribute lets you declare a PL/SQL record that represents a row in a database table, without listing all the columns. Your code keeps working even after columns are added to the table. If you want to represent a subset of columns in a table, or columns from different tables, you can define a view or declare a cursor to select the right columns and do any necessary joins, and then apply %ROWTYPE to the view or cursor.

      记录类型的定义语法:

      TYPE record_name IS RECORD(

         field_name1 datatype1 [NOT NULL][DEFAULT | := expression1],

         field_namen datatype2 [NOT NULL][DEFAULT | := expressionn]

       );

      记录声明

      v_record1 record_name;

      v_record2 record_name;

      记录的引用

      record_name.field_name

      记录赋值   v_record1:=v_record2;     --赋值的两个record必须是相同类型的记录

      使用%ROWTYPE

      v_recordnamen table_name%ROWTYPE;

      将定义一个记录v_recordnamen,记录中的各字段类型,将与表table_name的各列类型相对应。

      而%TYPE只会返回某一列的类型,使用%TYPE时,在列上定义的所有NOT NULL约束都不会被包含进来。

     

     

    1.2 PL/SQL table

          PL/SQL提供一种复合类型 TABLE(即PL/SQL表)。PL/SQL表有两列KEY列和VALUE列。PL/SQL tables have only one column and use a primary key to give you array-like access to rows.  这个列可以是标量类型(scalar type)如CHAR、DATE、NUMBER。但是primary key必须是BINARY_INTEGER、PLS_INTEGER或者VARCHAR2中的一种。

          可以在块、过程、函数或者包的声明部分声明 PL/SQL table type。

      ...

      DECLARE

         TYPE tabletype_name IS TABLE OF type

           INDEX BY BINARY_INTEGER;

      ...

      BEGIN

         ...

      END;

     

      Once you declare type tabletype_name ,you can declare PL/SQL tables of that type, as the next example shows:

     

       v_tabletype tabletype_name;

     

       声明了类型和变量以后,就可以引用了。you can reference rows in PL/SQL table using array-like syntax to specify the primary key value. For example, you reference index(第index行) row in the PL/SQL table named v_tabletype as follows:

     

      v_tabletype(index);

     

     

    1.2.1 PL/SQL版本2.3允许PL/SQL存储记录的表。

        DECLARE

          TYPE t_StudentTable IS TABLE OF students%ROWTYPE

             INDEX BY BINARY_INTEGER

          v_Students t_StudentTable;

        BEGIN

          SELECT *

       INTO v_Students(10001)

             FROM students

             WHERE id=10001;

        END;

     

       you can reference rows in the PL/SQL table as follows:

       table(index).field

       如:

           v_Students(10001).first_name:='Larry';

     

     

    1.3PL/SQL table  的 attribute

            属性                                    返回类型                                     说明

         COUNT                                  NUMBER                                返回表中行的数目

         DELETE                                 N/A                                        删除表中的行,如果没有参数会全部删除

         EXESTS                                 BOOLEAN                              如果指定的表项存在,返回TRUE

         FIRST                                    BINARY_INTEGER                  返回表中第一行的索引

         LAST                                     BINARY_INTEGER                  返回表中最后一行的索引

         NEXT                                     BINARY_INTEGER                 返回表中指定行的下一行的索引

         PRIOR                                   BINARY_INTEGER                 返回表中指定行的上一行的索引

     

        一个表在第一次被创建的时候,它是不包含任何行的,这样,在不使用DELETE的情况下,如果要删除整个PL/SQL表,可以将一个空表赋值给它。

     


    最新回复(0)