ORACLE存储过程使用数组

ORACLE存储过程使用数组
1 单维数组

--单维数组
DECLARE
    -- 定义一个数组
    TYPE emp_ssn_array IS TABLE OF NUMBER INDEX BY BINARY_INTEGER; 
    -- 声明第一个数组变量
    best_employees  emp_ssn_array;
    -- 声明第二个数组变量
    worst_employees emp_ssn_array;
BEGIN
    -- 数组变量赋值
    best_employees(1) := '123456';
    best_employees(2) := '888888';
    worst_employees(1) := '222222';
    worst_employees(2) := '666666';
    --循环数组
    FOR i IN 1 .. best_employees.count LOOP
            DBMS_OUTPUT.PUT_LINE('i=' || i || ', best_employees= ' ||
                                 best_employees(i) || ', worst_employees= ' ||
                                 worst_employees(i));
        END LOOP;
END;

2 多维数组

--多维数组
DECLARE
    -- 定义一个类型 并指定参数类型 employee_table 数据库表 emp_id 字段
    TYPE emp_type IS RECORD(
                               emp_id     employee_table.emp_id%TYPE,
                               emp_name   employee_table.emp_name%TYPE,
                               emp_gender employee_table.emp_gender%TYPE);
    -- 指定数组类型
    TYPE emp_type_array IS TABLE OF emp_type INDEX BY BINARY_INTEGER;
    -- 定义数组变量
    emp_rec_array emp_type_array;
    -- 类型变量
    emp_rec       emp_type;
BEGIN
    -- 给变量赋值
    emp_rec.emp_id     := 300000000;
    emp_rec.emp_name   := 'Barbara';
    emp_rec.emp_gender := 'Female';
    -- 添加到数组
    emp_rec_array(1) := emp_rec;
    emp_rec.emp_id     := 300000008;
    emp_rec.emp_name   := 'Rick';
    emp_rec.emp_gender := 'Male';
    emp_rec_array(2) := emp_rec;
    -- 循环数组
    FOR i IN 1 .. emp_rec_array.count LOOP
            DBMS_OUTPUT.PUT_LINE('i=' || i || ', emp_id =' || emp_rec_array(i)
                .emp_id || ', emp_name =' || emp_rec_array(i)
                                     .emp_name || ', emp_gender = ' || emp_rec_array(i)
                                     .emp_gender);
        END LOOP;
END;

3 SQL数据添加到数组

DECLARE
    -- 先指定参数类型
    TYPE emp_type IS RECORD
                     (
                         emp_id     book.id%TYPE,
                         emp_name   book.name%TYPE,
                         emp_gender book.age%TYPE
                     );
    -- 创建数组
    TYPE emp_type_array IS TABLE OF emp_type INDEX BY BINARY_INTEGER;
    -- 定义数组变量
    emp_rec_array emp_type_array;
    
BEGIN
    -- 从表查询结果并插到定义 的数组变量
    select id, name, age bulk collect into emp_rec_array from book;
    -- 循环遍历数组
    FOR i IN 1 .. emp_rec_array.count
        LOOP
            DBMS_OUTPUT.PUT_LINE('i=' || i || ', emp_id =' || emp_rec_array(i)
                .emp_id || ', emp_name =' || emp_rec_array(i)
                                     .emp_name || ', emp_gender = ' || emp_rec_array(i)
                                     .emp_gender);
        END LOOP;
END;

如有更好的方法欢迎留言。。。。。

 原著所有,如需转载请注明出处。
上一篇:如何修改product.product的display_name的显示,解决_rec_name失效的问题


下一篇:【洛谷】P1107 [BJWC2008]雷涛的小猫