【发布时间】:2017-10-31 17:53:10
【问题描述】:
我有一张这样的桌子:
CREATE TABLE T_C_EVO_GAME_CONFIG_CHANGE_LOG(
F_TABLE_MODIFIED VARCHAR2(40),
F_OPERATION_PERFORMED VARCHAR2(30),
F_ROWS_ALTERED INTEGER,
F_LAST_UPDATED_BY VARCHAR2(200),
F_LAST_UPDATED_DATE TIMESTAMP);
我正在尝试构建具有相同结构的类型:
create or replace type TYPE_EVOL_CONFIG_CHANGE_LOG as object
(
F_TABLE_MODIFIED T_C_EVO_GAME_CONFIG_CHANGE_LOG.TABLE_MODIFIED%TYPE ,
F_OPERATION_PERFORMED T_C_EVO_GAME_CONFIG_CHANGE_LOG.OPERATION_PERFORMED%TYPE,
F_ROWS_ALTERED T_C_EVO_GAME_CONFIG_CHANGE_LOG.ROWS_ALTERED%TYPE ,
F_LAST_UPDATED_BY T_C_EVO_GAME_CONFIG_CHANGE_LOG.LAST_UPDATED_BY%TYPE ,
F_LAST_UPDATED_DATE T_C_EVO_GAME_CONFIG_CHANGE_LOG.LAST_UPDATED_DATE%TYPE
);
在创建类型时收到以下错误消息:
错误(3,25):PLS-00201:必须声明标识符“T_C_EVO_GAME_CONFIG_CHANGE_LOG.TABLE_MODIFIED”。
以前我尝试在不使用%TYPE 的情况下创建类型,而只是简单地复制参数定义并且它起作用了。
但是当我在 Table 中进行任何更改时,我不想对 Type 进行任何更改。
【问题讨论】:
-
您的列名以
F_前缀开头,对于%TYPE,您必须像在create-table-statement 中一样编写它们。 -
喔甚至具有相同的名称,如:创建或替换类型TYPE_EVOL_CONFIG_CHANGE_LOG作为对象(F_TABLE_MODIFIED T_C_EVO_GAME_CONFIG_CHANGE_LOG.F_TABLE_MODIFIED%TYPE,F_OPERATION_PERFORMED T_C_EVO_GAME_CONFIG_CHANGE_LOG.F_OPERATION_PERFORMED%TYPE,F_ROWS_ALTERED T_C_EVO_GAME_CONFIG_CHANGE_LOG.F_ROWS_ALTERED%TYPE,F_LAST_UPDATED_BY T_C_EVO_GAME_CONFIG_CHANGE_LOG.F_LAST_UPDATED_BY%类型,F_LAST_UPDATED_DATE T_C_EVO_GAME_CONFIG_CHANGE_LOG.F_LAST_UPDATED_DATE%TYPE);它给出了同样的错误。
-
抱歉,这样不行,看APC的优秀回答
标签: oracle plsql user-defined-types