创建新表类型时出现 PLS-00355 错误

Posted

技术标签:

【中文标题】创建新表类型时出现 PLS-00355 错误【英文标题】:PLS-00355 error whike creating a new table type 【发布时间】:2021-10-22 08:03:31 【问题描述】:

我在尝试像这样创建新类型时收到 PLS-00355 错误:

CREATE OR REPLACE TYPE DAYS_T IS TABLE OF VARCHAR(250) INDEX BY BINARY_INTEGER;

有什么线索吗? 非常感谢!

【问题讨论】:

【参考方案1】:

这就是你所做的以及 Oracle 的回应:

SQL> CREATE OR REPLACE TYPE DAYS_T IS TABLE OF VARCHAR(250) INDEX BY BINARY_INTEGER;
  2  /

Warning: Type created with compilation errors.

SQL> show err
Errors for TYPE DAYS_T:

LINE/COL ERROR
-------- -----------------------------------------------------------------
0/0      PL/SQL: Compilation unit analysis terminated
1/16     PLS-00355: use of pl/sql table not allowed in this context

另一方面:

SQL> CREATE OR REPLACE TYPE DAYS_T IS TABLE OF VARCHAR2(250);
  2  /

Type created.

SQL>

回应您的评论:如果您在 PL/SQL 级别(不是 SQL)声明类型,那么您的代码(尽管没有 create or replace)就可以(第 2 行是您使用的字面意思):

SQL> declare
  2    TYPE DAYS_T IS TABLE OF VARCHAR(250) INDEX BY BINARY_INTEGER;
  3  begin
  4    null;
  5  end;
  6  /

PL/SQL procedure successfully completed.

SQL>

【讨论】:

好的,谢谢。但是如何添加索引?在此示例中,我想做类似于 t_features(在接受的答案中)***.com/questions/9155742/… 不客气。这是在 PL/SQL 中声明的,而不是在 SQL 级别。请参阅编辑后的答案。【参考方案2】:

您可以使用以下方法在 SQL 范围内定义嵌套表集合类型:

CREATE OR REPLACE TYPE DAYS_T IS TABLE OF VARCHAR(250);

您可以使用以下方法在 PL/SQL 范围内定义关联数组集合类型:

DECLARE
  TYPE DAYS_T IS TABLE OF VARCHAR(250) INDEX BY BINARY_INTEGER;
BEGIN
  NULL;
END;
/

您还可以使用以下方法在 PL/SQL 范围内本地定义嵌套表集合类型:

DECLARE
  TYPE DAYS_T IS TABLE OF VARCHAR(250);
BEGIN
  NULL;
END;
/

但是,您不能在 SQL 范围内定义关联数组集合类型,因为它是仅限 PL/SQL 的数据类型。


然后你在 cmets 中问:

但是如何添加索引呢?

它们都有一个索引。

例如,在 SQL 中声明类型后,可以像这样使用 PL/SQL 中的嵌套表集合:

DECLARE
  v_days DAYS_T;
BEGIN
  v_days := DAYS_T();       -- Initialise the collection.
  v_days.EXTEND(3);         -- Extend the collection by 3 elements.
  v_days(1) := 'Monday';    -- Set the first element.
  v_days(3) := 'Wednesday'; -- Set the third element.

  FOR i IN 1 .. v_days.COUNT LOOP
    DBMS_OUTPUT.PUT_LINE( i || ' = ' || v_days(i) );
  END LOOP;
END;
/

哪些输出:

1 = Monday
2 = 
3 = Wednesday

db小提琴here

【讨论】:

以上是关于创建新表类型时出现 PLS-00355 错误的主要内容,如果未能解决你的问题,请参考以下文章

在材质表 React 中定义表列时使用渲染时出现类型错误

在 C# 中使用非原始类型重新创建 C++ 联合类型时出现对齐错误

EOLESysError 使用 OpenOffice 创建 pdf 文件时出现错误的变量类型错误

尝试从数据库下载“图像”列内容时出现日期类型转换错误

将用户定义的表类型与生成的数据库部署脚本一起使用时出现问题

为啥当我尝试在 MariaDB 数据库上创建此函数(使用点数据类型)时出现此错误?