如何在表中使用打包类型作为列类型?

时间:2017-05-15 18:01:39

标签: database oracle plsql user-defined-types varray

我目前正在尝试了解如何使用在包中创建的类型I作为我的表中的列类型。

这是我的包裹的代码......

create or replace PACKAGE  MY_TYPES
IS 
--Associative Array Types 
TYPE permutation_array IS TABLE OF VARCHAR2(300) INDEX BY PLS_INTEGER; 

--VARRAY Types
TYPE code_array IS VARRAY(4) OF VARCHAR2(9); 

然后是我的桌子......

CREATE TABLE mastermind.match_table (match_id NUMBER(4), code_breaker_id NUMBER(4) , 
code_breaker_name VARCHAR2(200),
code_master_id NUMBER(4),
code_master_name VARCHAR2(200),
winner_id NUMBER(4),
game_code MY_TYPES.code_array );

我收到了错误......

  

从命令行中的第3行开始出错 - CREATE TABLE   mastermind.match_table(match_id NUMBER(4),code_breaker_id NUMBER(4)   ,code_breaker_name VARCHAR2(200),code_master_id NUMBER(4),   code_master_name VARCHAR2(200),winner_id NUMBER(4),game_code   MASTERMIND_COLLECTION_TYPES.code_array)错误报告 - ORA-00902:   数据类型无效   00902. 00000 - "无效的数据类型"   *原因:
  *操作:

有人可以协助吗?这将不胜感激。

1 个答案:

答案 0 :(得分:6)

我们不能在表定义中使用PL / SQL类型。它必须是SQL类型。

create or replace type code_array IS VARRAY(4) OF VARCHAR2(9); 

然后你可以创建一个表:

CREATE TABLE mastermind.match_table (match_id NUMBER(4), 
    code_breaker_id NUMBER(4) , 
    code_breaker_name VARCHAR2(200),
    code_master_id NUMBER(4),
    code_master_name VARCHAR2(200),
    winner_id NUMBER(4),
    game_code code_array );