`
wangjianzong
  • 浏览: 6161 次
  • 性别: Icon_minigender_1
  • 来自: 苏州
最近访客 更多访客>>
文章分类
社区版块
存档分类
最新评论

编写pl sql 数组类型时遇到的问题

阅读更多
CREATE OR REPLACE FUNCTION SPLIT1
(
P_LIST VARCHAR2,
P_DEL VARCHAR2 := ','
) RETURN SPLIT_TBL
IS
l_idx PLS_INTEGER;
l_list VARCHAR2(32767) := P_LIST;
v_table SPLIT_TBL := SPLIT_TBL();                 少了红色代码会报错ORA-06531
v_temp PLS_INTEGER := 1;
BEGIN
LOOP
  l_idx := INSTR(l_list,p_del);
  IF l_idx > 0 THEN
    v_table.extend;
    v_table(v_temp) := SUBSTR(l_list,1,l_idx-1);
    l_list := SUBSTR(l_list,l_idx+LENGTH(P_DEL));
    v_temp := v_temp + 1;
  ELSE
    v_table.extend;
    v_table(v_temp) := l_list;
    EXIT;
  END IF;
END LOOP;
RETURN v_table;
END;

--------------------------------------------------------------------------------------------------------------------------------------------
问题
difference between array and plsql table???

TYPE array_typ IS TABLE OF VARCHAR2 (4000);

TYPE pltab_typ IS TABLE OF VARCHAR2 (4000)
INDEX BY BINARY_INTEGER;

wat is the diff between the two types of declaration?
the web site says the first one is array and the second one is a plsql table and not an array...


回答1
The first one is a nested table type. It needs to be initialized explicitly.

SQL> declare
  2     type t is table of number;
  3     l t;
  4  begin
  5     l(1):=1;
  6  end;
  7  /
declare
*
ERROR at line 1:
ORA-06531: Reference to uninitialized collection
ORA-06512: at line 5


SQL> declare
  2     type t is table of number;
  3     l t := t();
  4  begin
  5     l.extend;
  6     l(1):=1;
  7  end;
  8  /
PL/SQL procedure successfully completed.





The other one is a associative array which need not be initialized.

SQL> declare
  2     type t is table of number index by pls_integer;
  3     l t;
  4  begin
  5     l(1):=1;
  6  end;
  7  /
PL/SQL procedure successfully completed.






回答2
there are lot of differences between pl/sql table and arrays.

1.array is set of values of same datatype.. where as tables can store values of diff datatypes.. also tables has no upper limit where as arrays has.

2. PL/SQL tables are temporary array like objects used in a PL/SQL Block. The size of pl/sql table is unconstrained. For varrays we need to specify upperbound.

3. Pl/sql tables can not be stored in database where as varrays can be stored in database

4. We can use negetive index for pl/sql tables. In varrays negetive index is not allowed

5. You can not perform DML operations on PL/SQL table . DML operations can be performed on Varrays.
分享到:
评论

相关推荐

    pl/sql最新中文手册

    6. **复合类型**:PL/SQL支持数组、集合和记录等复合类型,这些使得处理复杂数据结构变得可能。手册会详细介绍这些类型的创建和使用。 7. **包(Packages)**:包是将相关的过程、函数和变量封装在一起的一种方式,...

    oracle pl sql 实例精解 源代码

    通过阅读和执行这些脚本,读者能掌握如何在PL/SQL中进行数据操作、数据转换、数据聚合,以及如何使用PL/SQL进行数据库编程,包括调用系统包、处理PL/SQL记录类型、游标变量以及数组等高级特性。 总的来说,这个资料...

    精通pl/sql

    5. **集合类型**:讨论PL/SQL中的集合类型,如数组、关联数组、表类型和索引表,以及它们在处理大量数据时的优势。 6. **包(PACKAGE)**:解释如何创建和使用包,包括包规范(PACKAGE SPECIFICATION)和包体...

    PL-SQL(chinese).rar_pl_pl sql_pl/sql

    PL/SQL支持游标、嵌套表、关联数组等高级数据结构,这些在处理复杂查询和批量操作时非常有用。此外,PL/SQL还可以调用Oracle的内置函数和过程,以及用户自定义的数据库对象,实现与数据库的深度交互。 总之,PL/...

    PL_SQL_

    包括字符集、词法单元(如分隔符、标识符、文字、注释)、声明、命名规范、作用域和可见度、变量赋值、表达式与比较以及内置函数等内容,这些都是理解和编写PL/SQL程序的基础。 ### PL/SQL数据类型 预定义数据类型...

    Oracle PL SQL 程序设计 下 第五版

    - 集合:PL/SQL提供数组和关联数组,允许存储多个同类型的值。 - 游标:用于遍历查询结果集,允许按行处理数据,常用于动态执行SQL。 6. **异常处理** - PL/SQL提供了一个异常处理机制,通过EXCEPTION关键字捕获...

    精通Oracle 10g SQL和PL SQL.zip

    7. 集合类型:使用PL/SQL内置的集合类型(如TABLE、VARRAY、INDEX BY TABLE)处理数组数据。 8. 包(PACKAGE):封装相关的对象,如过程、函数、类型等,提高代码复用性和可维护性。 Oracle 10g SQL和PL/SQL的学习...

    PL/SQL学习笔记

    在编写PL/SQL代码时,应遵循一些命名约定和编码规范,以提高代码的可读性和可维护性。例如,变量名、过程名、函数名等应该有意义,并遵循一定的命名规则。使用游标时,应确保游标正确打开和关闭,以及游标中的数据...

    pl/sql使用软件

    4. **集合**:PL/SQL支持数组和记录等集合类型,允许存储多个同类型的数据项。 5. **游标**:游标是处理查询结果集的一种方式,可以逐行访问SELECT语句返回的结果。这对于迭代处理大量数据非常有用。 6. **存储...

    oracle PL SQL 程序设计(第5版)下册

    4. **集合与记录**:PL/SQL支持数组(collections)和自定义记录类型,这对于处理批量数据和复杂数据结构非常有用。 5. **游标**:游标是PL/SQL中处理单行或多行查询结果的主要手段,包括隐式游标和显式游标。 6. ...

    精品资源:超全PL/SQL教程全集

    - **集合**:PL/SQL提供数组类型,可以存储一组相同类型的值,方便批量操作。 5. **异常处理** - **异常**:当程序运行时发生错误,会产生异常。PL/SQL中的异常处理机制允许我们编写代码来捕获并处理这些异常。 ...

    PL SQL(简洁、经典、入门)

    4. **集合与记录**:PL SQL中的集合类型如VARRAY(固定大小数组)和TABLE(动态大小数组),以及记录类型,允许我们处理多条数据或复杂数据结构。 5. **游标**:游标是PL SQL处理单条查询结果的方式,可以逐行读取...

    oracle脚本 常用的数据库sql及pl\sql语言

    3. 集合类型:PL/SQL支持数组、关联数组和集合,允许一次处理多个数据项。 4. 引用游标:允许将游标作为参数传递,实现更灵活的代码设计。 5. 表达式索引:在创建索引时可以包含函数或表达式,加速复杂查询。 五、...

    oracle pl/sql fundamentals

    4. **异常处理**:理解PL/SQL中的错误处理机制,学习使用EXCEPTION块来捕获和处理运行时错误。 5. **子程序和包**:探讨函数、过程的创建、调用和参数传递,以及如何打包相关函数和过程为一个可重用的包。 6. **...

    oracle 中 pl/sql 只是学习方法

    5. **异常处理**:PL/SQL的异常处理机制允许我们在遇到错误时执行特定的代码块,通过RAISE语句自定义异常,或者使用预定义的系统异常。 6. **事务管理**:在PL/SQL中,可以使用BEGIN、COMMIT、ROLLBACK语句进行事务...

    Oracle.PL.SQL程序设计

    3. **集合与记录类型**:PL/SQL支持数组和复合类型,如VARRAYs(固定大小数组)、associative arrays(关联数组)和records(记录),这些可以用来处理多行或多列的数据。 4. **游标**:游标是处理单行查询结果的...

    高级PL\SQL(介绍pl/sql)

    PL/SQL提供嵌套表和关联数组作为复合数据类型,允许在单个变量中存储多个值,提高了数据处理的效率。 10. **PL/SQL与Oracle API的集成** PL/SQL可以直接调用Oracle提供的各种API,如DBMS_OUTPUT用于调试,DBMS_...

Global site tag (gtag.js) - Google Analytics