标签: varray

PL/SQL在IN CLAUSE中使用VARRAY

是否可以在pl/sql的IN CLAUSE中使用VARRAY?

oracle plsql oracle10g varray

8
推荐指数
1
解决办法
1万
查看次数

Oracle用户为varchar的varray定义了聚合函数

我正在尝试为varray编写一些聚合函数,当我尝试将它与数据库中的数据一起使用时,我得到了这个错误代码:

ORA-00600 internal error code, arguments: [kodpunp1], [], [], [], [], [], [], [], [], [], [], []
[koxsihread1], [0], [3989], [45778], [], [], [], [], [], [], [], []
Run Code Online (Sandbox Code Playgroud)

函数的代码非常简单(事实上它什么都不做):

create or replace
TYPE "TEST_VECTOR" as varray(10) of varchar(20)
 ALTER TYPE "TEST_VECTOR" MODIFY LIMIT 4000 CASCADE


create or replace
type Test as object(
  lastVector TEST_VECTOR,

  STATIC FUNCTION ODCIAggregateInitialize(sctx in out Test) return number,
MEMBER FUNCTION ODCIAggregateIterate(self in out Test, value in TEST_VECTOR) return number,
MEMBER FUNCTION ODCIAggregateMerge(self IN OUT …
Run Code Online (Sandbox Code Playgroud)

oracle aggregate-functions oracle11g varray

8
推荐指数
1
解决办法
1491
查看次数

Oracle - 如何从VARRAY读取

我的表中有一个包含VARRAY VARCHAR2的列,所以我想创建一个select语句,它给我所有的列和VARRAY的所有对象,彼此相邻,是否有可能这样做?

例:

CREATE TYPE arr AS VARRAY(5) OF VARCHAR2(10);

CREATE TABLE table1(
    v1 VARCHAR2(10)
    v2 VARCHAR2(20)
    v3 arr);

SELECT t.v1, t.v2, ??? FROM table1 t;
Run Code Online (Sandbox Code Playgroud)

谢谢!

sql oracle varray

8
推荐指数
1
解决办法
707
查看次数

我可以切片PL/SQL集合吗?

我有一个PL/SQL VArray,我正在填写像这样的BULK COLLECT查询:

SELECT id
BULK COLLECT INTO myarray
FROM aTable
Run Code Online (Sandbox Code Playgroud)

现在我想把这个集合的一部分传递给另一个集合,如下所示:

newarray := myarray(2..5)
Run Code Online (Sandbox Code Playgroud)

这应该将元素2,3,4和5从myarray传递给newarray.

我可以写一个循环并复制元素,但是有更简洁的方法吗?

oracle plsql varray

6
推荐指数
1
解决办法
1246
查看次数

如何在JDBC中处理VARRAY(Oracle 9i)?

我正在尝试编写一个小程序,它必须存储和检索数据库中的值.数据库是对象关系的.

这是DDL语句:

create or replace type Guy as object (name varchar(80), address varchar(80), dateOfBirth date)

create or replace type KnownLanguages as varray(10) of varchar(80)

create table Coders (person_ Guy, description clob, knownLanguages_ KnownLanguages)
Run Code Online (Sandbox Code Playgroud)

这是我的Java代码:

package adbms;

import java.sql.Clob;
import java.sql.Connection;
import java.sql.Date;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;

import oracle.jdbc.OracleDriver;
import oracle.jdbc.driver.OraclePreparedStatement;
import oracle.jdbc.driver.OracleResultSet;
import oracle.sql.ARRAY;
import oracle.sql.ArrayDescriptor;

public class SimpleJdbcApplication {
    public static final String DRIVER_TYPE = "thin";
    public static final …
Run Code Online (Sandbox Code Playgroud)

java oracle varray

5
推荐指数
1
解决办法
2672
查看次数

Hibernate 和 Oracle VARRAYS/NESTED TABLE

Oracle 支持使用 VARRAYS 和 NESTED TABLE 数据类型,允许多值属性。(http://www.orafaq.com/wiki/NESTED_TABLE

我目前使用 Hibernate 3 作为我的 ORM 框架,但我不知道如何将 Hibernate 映射到数据库中的 NESTED TABLE/VARRAY 数据类型。

我考虑在 Hibernate 中定义自定义类型,但没有成功。(Hibernate 甚至可以处理取消嵌套子表所需的“COLUMN_VALUE”Oracle 关键字吗?)

有谁知道如何在 Hibernate 中实现这些数据类型?

感谢大家的帮助。

——TBW。

java oracle hibernate varray nested-table

5
推荐指数
1
解决办法
7024
查看次数

如何在PL/SQL中使用带有VARRAY的SQL'IN'(或'ANY')运算符

我的.NET代码目前正在使用ODP.NET多次调用存储过程来操作许多表中的各个行..NET代码有一组要更改的行.每次调用只改变一个参数,我想将数组从.NET传递给PL/SQL以在多行上运行(行数将改变).

我使用以下方法成功地将数组从.NET传递到PL/SQL:

type number_arr is table of number(10) index by pls_integer;
PROCEDURE "BLAH" (foo IN number_arr);
Run Code Online (Sandbox Code Playgroud)

请注意,我认为number_arr被称为VARRAY,但我对此并不乐观,如果有人想要纠正我,请做(作为评论),但这可能会导致我的困惑.

但是现在,在PL/SQL中,我有许多更新语句,它们看起来像:

UPDATE t SET a = b WHERE a = foo;
Run Code Online (Sandbox Code Playgroud)

当foo不是一个数组时.我现在想写:

UPDATE t SET a = b WHERE a IN (foo);
Run Code Online (Sandbox Code Playgroud)

但是这种语法似乎不起作用.我一直无法找到一个结合使用VARRAY和'IN'(或'ANY'等)的Oracle的例子.我已经看到了如何使用SQL Server做到这一点的一些答案,但我不确定如何将其转换为Oracle.

当然,如果还有其他方法可以将数组从.NET运行到存储过程来执行此操作,那么这也将回答我的问题.我希望通过IN获得效率,所以在PL/SQL中对数组进行迭代(分别调用UPDATE语句)可能无济于事.

sql oracle plsql odp.net varray

5
推荐指数
1
解决办法
5107
查看次数

NESTED TABLE 和 VARRAY 的区别

我知道两者的基本区别和用途。但是,我正在寻找的答案是,为什么要引入 VARRAY ?

因为,我们可以使用 NESTED TABLE 做同样的事情,而使用 VARRAY 可以做同样的事情,而在某些情况下反之亦然。另外,我注意到有些地方人们提到 VARRAY 存储元素in-line。这是什么意思 ?谁能解释两者的内部存储和处理?

oracle plsql varray nested-table

5
推荐指数
1
解决办法
1万
查看次数

如何计算表中所有Oracle变量的元素数量?

我有这样一张桌子:

CREATE TABLE spatial_data (
  id NUMBER PRIMARY KEY,
  geometry SDO_GEOMETRY);
Run Code Online (Sandbox Code Playgroud)

SDO_GEOMETRY有一个带有以下类型的字段sdo_ordinates:

TYPE SDO_ORDINATE_ARRAY作为NUMBER的VARRAY(1048576)

我可以得到指定对象的点数:

select count(*)
from table(
    select s.geometry.sdo_ordinates
    from spatial_data s
    where s.id = 12345
);
Run Code Online (Sandbox Code Playgroud)

我如何计算几个物体?这是不可能的

where s.id in (1, 2, 3, 4, 5)
Run Code Online (Sandbox Code Playgroud)

我真的很在乎性能.也许PL/SQL会是正确的选择?

oracle spatial count varray

4
推荐指数
1
解决办法
5841
查看次数

oracle sql varray包含一个元素

我有这样的类型声明:

  FUNCTION ...
  IS 
     TYPE stati_va IS VARRAY (10000) OF varchar(1);
     stati       stati_va;
     v_counter   INTEGER  := 0;
  BEGIN
      stati := stati_va ();

      --this is actually in a loop so the array contains more values
      v_counter := v_counter + 1;
      stati.EXTEND;
      stati (v_counter) := '4';


      --here I would like to determine if the array 'stati' contains a value
Run Code Online (Sandbox Code Playgroud)

到目前为止,我已经尝试了以下但是这给了我一个错误

      IF '4' member of stati then  <- COMPILE error
      IF '4' IN stati then         <- COMPILE error
Run Code Online (Sandbox Code Playgroud)

我知道循环数组是可能的,但这有点不方便,因为我需要构建这样的东西:

     IF array contains '4' …
Run Code Online (Sandbox Code Playgroud)

oracle plsql varray

3
推荐指数
1
解决办法
9929
查看次数