如何使用打包类型作为 table 中的列类型?

How do you use a packaged type as a column type in a table?

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

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

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); 

那么对于我的 table...

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 );

我收到错误...

Error starting at line : 3 in command - 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 ) Error report - ORA-00902: invalid datatype 00902. 00000 - "invalid datatype" *Cause:
*Action:

有人可以帮忙吗?这将不胜感激。

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

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

然后你可以创建一个table:

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 );