【问题标题】:How do you use a packaged type as a column type in a table?如何使用封装类型作为表中的列类型?
【发布时间】:2017-10-14 14:57:39
【问题描述】:

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

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

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 - “无效数据类型” *原因:
*行动:

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

【问题讨论】:

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


    【解决方案1】:

    我们不能在表定义中使用 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 );
    

    【讨论】:

    • 感谢您的帮助@APC。非常感谢。
    猜你喜欢
    • 1970-01-01
    • 2019-11-11
    • 1970-01-01
    • 2018-07-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-11-09
    • 1970-01-01
    相关资源
    最近更新 更多