oracle owner type in package: 如何在 SQL 中使用它?

Posted

技术标签:

【中文标题】oracle owner type in package: 如何在 SQL 中使用它?【英文标题】:oracle owner type in package: How to use it in SQL? 【发布时间】:2019-02-08 15:38:14 【问题描述】:

也许这对你来说是一个无聊的问题,但我直到现在才找到答案。

我在包中定义了一个向量类型记录。如何在 SQL 中使用它?

CREATE OR REPLACE PACKAGE PKG_MATH AS 
TYPE VECTOR IS RECORD (
    X NUMBER,
    Y NUMBER,
    Z NUMBER
); 
FUNCTION ARC(A VECTOR, B VECTOR) RETURN NUMBER;
END;

如何在 SQL 中使用它

SELECT PKG_MATH.ARC(PKG_MATH.VECTOR(1,1,0),PKG_MATH.VECTOR(1,-1,0)) FROM DUAL;

如果我这样做,我会得到

ORA-06553 PLS-222:不存在名为“VECTOR”的函数

【问题讨论】:

你不能,至少现在还不能。这将是一个不错的功能;但是,需要首先解决一些工程挑战(例如,如果您将 pkg_math.vector() 存储在表中,然后想要重新编译包,可能会更改类型的结构,会发生什么情况?)。 【参考方案1】:

您必须在 SQL 中使用CREATE TYPE 定义TYPE

CREATE TYPE VECTOR IS OBJECT (
    X NUMBER,
    Y NUMBER,
    Z NUMBER
); 
/

你可以在 PACKAGEd 函数中使用它:

CREATE OR REPLACE PACKAGE PKG_MATH AS 
 FUNCTION ARC (A VECTOR, B VECTOR) RETURN NUMBER;
END;
/

CREATE OR REPLACE PACKAGE BODY PKG_MATH AS 
 FUNCTION ARC (A VECTOR, B VECTOR) RETURN NUMBER AS
BEGIN
  return (-1);
END; 
END;
/


select PKG_MATH.ARC(VECTOR(1,1,1), VECTOR(0,90,0)) from dual

PKG_MATH.ARC(VECTOR(1,1,1),VECTOR(0,90,0))
------------------------------------------
                                        -1

【讨论】:

不可能把这个捆绑在包里吗?我需要将其定义为对象吗? 我想是的。请重新检查我提供的 Oracle 文档链接。

以上是关于oracle owner type in package: 如何在 SQL 中使用它?的主要内容,如果未能解决你的问题,请参考以下文章

Oracle 查看index是否失效

Oracle 索引的失效和重建

oracle 数据库查询所有表的名字以及统计表中的记录数

Oracle的锁表与解锁

Oracle的锁表与解锁

oracle中的owner啥意思