Тип владельца Oracle в пакете: как использовать его в SQL? - PullRequest
0 голосов
/ 08 февраля 2019

Возможно, это скучный вопрос для вас, но я до сих пор не нашел ответа.

Я определил запись типа вектора в пакете.Как я могу использовать это в 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» не существует

1 Ответ

0 голосов
/ 08 февраля 2019

Вы должны определить TYPE в SQL, используя CREATE 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...