oracle 19c 中的内部与外部数据类型
Posted
技术标签:
【中文标题】oracle 19c 中的内部与外部数据类型【英文标题】:Internal vs external data type in oracle 19c 【发布时间】:2021-03-30 04:49:26 【问题描述】:我读了很长时间Oracle documentation
,仍然无法理解Internal vs External datatype
的区别和实际含义。在oracle 19c
中,我读取了内部与外部数据类型。
有人可以建议,下面的代码如何与oracle19c
..不兼容。它只是标题。我认为一些datatype
问题存在但无法弄清楚。
我无法理解下面的package specificatio
n 如何与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 datatype
。
https://docs.oracle.com/en/database/oracle/oracle-database/19/lnoci/data-types.html#GUID-027FB2E2-593C-43F1-9184-DFEF7A984A27
【问题讨论】:
“此文件已被扫描无效”是什么意思?如果您收到错误消息,如果您编辑问题并打印完整的错误消息以及生成错误消息的工具,将会有所帮助。内部数据类型与外部数据类型是什么意思?您是使用 OCCI 还是其他工具连接到数据库? @JonHeller 谢谢乔恩,我已经更新了这个问题。实际上,我们正在将我们的应用程序从 12c 迁移到 19c(ADB),因此发布团队强调需要更改这些文件。我只是浏览文档并编辑它们。我认为这是一个小文件,所以可能是数据类型问题。我已经修改了这个问题。请帮忙。 “内部”数据类型被称为“内置”,它们列在您上面给出的参考文献的表 5.1 中。因此,通过推断,“外部”数据类型是那些可能从其他来源遇到的数据类型。 "外部数据类型代码向 Oracle 数据库指示主变量如何表示程序中的数据。这决定了数据在返回到程序中的输出变量时如何转换,或者如何从输入转换(绑定) 变量到 Oracle 数据库列值。" 谢谢保罗。可以举个例子吗? 当您说“发布团队强调这些文件需要更改”时,他们到底说什么需要更改?我看不出包装规范有任何明显错误。自定义类型ecc_sec_field_values
可能有问题?
【参考方案1】:
如果您省略用户定义的数据类型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
语句的提交行为......
【讨论】:
以上是关于oracle 19c 中的内部与外部数据类型的主要内容,如果未能解决你的问题,请参考以下文章
Migrating Oracle 11g R2 To Oracle 19c