在Type Record中插入记录,从Type中提取数据

Insert the record in Type Record and extract the data from Type

我想将数据插入到 Type 中,并想在过程中提取相同的数据。它显示 table 视图不存在,即使我创建了与我用来插入数据的名称相同的类型。请提出建议。

SET SERVEROUTPUT ON;

DECLARE
FACTORYID       VARCHAR2(200);
TYPE FACTORY_INFORMATION
    IS   RECORD
        (FACTORYID             VARCHAR2(1000),
         BILLINGDAY            VARCHAR2(1000),
         DUE_DAY               VARCHAR2(1000),
         FACTORYNAME           VARCHAR2(1000)
        );

    TYPE TT_FACTORY_INFORMATION   IS TABLE OF FACTORY_INFORMATION INDEX BY BINARY_INTEGER;

    FACTORY_INFO TT_FACTORY_INFORMATION;

BEGIN
INSERT INTO FACTORY_INFO (
SELECT 11,
       25,
       20,
       'xyz'
       FROM dual);
);

SELECT FACTORY_INFO INTO FACTORYID FROM FACTORY_INFO;
DBMS_OUTPUT.PUT_LINE(FACTORYID);
END;

出现以下错误。

Error report -
ORA-06550: line 16, column 13:
PL/SQL: ORA-00942: table or view does not exist
ORA-06550: line 16, column 1:
PL/SQL: SQL Statement ignored
ORA-06550: line 23, column 41:
PL/SQL: ORA-00942: table or view does not exist
ORA-06550: line 23, column 1:
PL/SQL: SQL Statement ignored
06550. 00000 -  "line %s, column %s:\n%s"
*Cause:    Usually a PL/SQL compilation error.
*Action:

FACTORY_INFO 是一个 PL/SQL 变量而不是 table。所以你不能将它用作 SQL INSERT 语句的目标。

同样,因为 FACTORY_INFORMATION 是一个 PL/SQL 记录类型,你不能 select 从它 SQL 中(甚至不使用 table()功能)。您需要使用 PL/SQL 集合操作。

你可以这样做:

DECLARE
  FACTORYID       VARCHAR2(200);
  TYPE FACTORY_INFORMATION
    IS   RECORD
        (FACTORYID             VARCHAR2(1000),
         BILLINGDAY            VARCHAR2(1000),
         DUE_DAY               VARCHAR2(1000),
         FACTORYNAME           VARCHAR2(1000)
        );

    TYPE TT_FACTORY_INFORMATION   IS TABLE OF FACTORY_INFORMATION INDEX BY BINARY_INTEGER;

    FACTORY_INFO TT_FACTORY_INFORMATION;

BEGIN
  SELECT 11,
         25,
         20,
         'xyz'
  bulk collect into FACTORY_INFO
  FROM dual;

  DBMS_OUTPUT.PUT_LINE(FACTORY_INFO(1).FACTORYID);

END;
/

Oracle PL/SQL 参考中有一整章专门介绍记录和集合,并提供了大量有关如何使用它们的示例。 Find out more