oracle 19c 中的内部与外部数据类型

Internal vs external data type in oracle 19c

看了很久Oracle documentation,还是没明白Internal vs External datatype的区别和实际含义。在 oracle 19c 中,我阅读了内部数据类型与外部数据类型。

有人可以建议,下面的代码如何与 oracle19c 不兼容。它只是 header。我认为存在一些 datatype 问题但无法弄清楚。

我无法理解以下 package specification 为何与 oracle19c 不兼容。此文件已扫描无效。 Oracle 文档没有帮助

CREATE OR REPLACE PACKAGE ABC_ECC_DATASECURITY_PKG_PUB AS
/* $Header: ABCCCDSS.pls 120.0.12020000.2 2020/11/17 21:49:12 mgarg noship $ */

  PROCEDURE GetFilterAttributeValues
  (   p_dataset_key    IN         VARCHAR2,
      p_user_id        IN         NUMBER,
      p_org_id         IN         NUMBER,
      p_resp_id        IN         NUMBER,
      p_resp_app_id    IN         NUMBER,
      p_sec_group_id   IN         NUMBER,
      p_params         IN         ecc_sec_field_values DEFAULT NULL,
      x_return_status  OUT NOCOPY VARCHAR2,
      x_return_message OUT NOCOPY VARCHAR2,
      x_sec_filter     OUT NOCOPY CLOB
  );

END ABC_ECC_DATASECURITY_PKG_PUB;
/

COMMIT;
EXIT;

有人可以建议我 oracle internal and external datatype 以及上面的任何帮助 specification 吗?

我在 oracle 文档中读到了这个。

https://docs.oracle.com/en/database/oracle/oracle-database/19/lnoci/data-types.html#GUID-D69455D9-CE01-44CC-B5A9-E541C7774805

这里提到internal vs external datatypehttps://docs.oracle.com/en/database/oracle/oracle-database/19/lnoci/data-types.html#GUID-027FB2E2-593C-43F1-9184-DFEF7A984A27

如果你省略了用户定义的数据类型,你的包就很好 ecc_sec_field_values:

CREATE OR REPLACE PACKAGE ABC_ECC_DATASECURITY_PKG_PUB AS

  PROCEDURE GetFilterAttributeValues
  (   p_dataset_key    IN         VARCHAR2,
      p_user_id        IN         NUMBER,
      p_org_id         IN         NUMBER,
      p_resp_id        IN         NUMBER,
      p_resp_app_id    IN         NUMBER,
      p_sec_group_id   IN         NUMBER,
      x_return_status  OUT NOCOPY VARCHAR2,
      x_return_message OUT NOCOPY VARCHAR2,
      x_sec_filter     OUT NOCOPY CLOB
  );

END ABC_ECC_DATASECURITY_PKG_PUB;
/

Package ABC_ECC_DATASECURITY_PKG_PUB compiled

但是,如果您包含 ecc_sec_field_values,我会收到错误消息:

CREATE OR REPLACE PACKAGE ABC_ECC_DATASECURITY_PKG_PUB AS

  PROCEDURE GetFilterAttributeValues
  (   p_dataset_key    IN         VARCHAR2,
      p_user_id        IN         NUMBER,
      p_org_id         IN         NUMBER,
      p_resp_id        IN         NUMBER,
      p_resp_app_id    IN         NUMBER,
      p_sec_group_id   IN         NUMBER,
      p_params         IN         ecc_sec_field_values DEFAULT NULL,
      x_return_status  OUT NOCOPY VARCHAR2,
      x_return_message OUT NOCOPY VARCHAR2,
      x_sec_filter     OUT NOCOPY CLOB
  );

END ABC_ECC_DATASECURITY_PKG_PUB;
/

Error(9,35): PLS-00201: identifier 'ECC_SEC_FIELD_VALUES' must be declared

我猜这是在其他文件中声明的 TYPE。寻找 CREATE OR REPLACE TYPE ecc_sec_field_values 或其他东西。

顺便说一句,COMMIT 似乎很危险,因为原作者似乎不理解 CREATE 语句的提交行为...