【问题标题】:ORACLE pass user defined object type as parameter to procedureORACLE 将用户定义的对象类型作为参数传递给过程
【发布时间】:2025-12-25 17:35:12
【问题描述】:

我正在尝试通过在过程中使用 FORALL 来尝试批量插入。

我已尝试以下步骤来创建程序:

**CREATE TYPE SECID_TABLE as TABLE OF VARCHAR2 INDEX BY NUMBER;**

CREATE PROCEDURE ASP_STOCK
(**p_secid IN SECID_TABLE**
) as
BEGIN
..
END;

但是上面两条语句编译不通。我对 oracle 比较陌生,并且使用 aqua studio,这在错误声明中似乎并不冗长。

有人可以指导我吗?

【问题讨论】:

  • "以上两条语句不编译。"错误信息是什么?在CREATE TYPE 语句之后的新行上是否只需要一个/ 字符?您真的需要使用关联数组还是可以删除INDEX BY NUMBER 子句并将其用作集合?

标签: oracle procedure


【解决方案1】:

这里有两个问题。

第一个问题是无法创建索引类型为NUMBER 的index-by 表。 SQLFiddle here将索引类型改为PLS_INTEGER

但是即使你这样做了,你仍然会得到错误,因为像这样的 index-by 表是一个 PL/SQL-only 结构。 SQLFiddle here.

您将不得不做其他事情。尝试未索引的 TABLE 类型,这在架构级别是允许的。 SQLFiddle here

祝你好运。

【讨论】:

    最近更新 更多