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 中使用它?的主要内容,如果未能解决你的问题,请参考以下文章