Вставьте запись в Type Record и извлеките данные из Type - PullRequest
0 голосов
/ 10 июля 2020

Я хочу вставить данные в Type и хочу извлечь их из процедуры. его отображение в виде таблицы не существует, даже если я создал тип с тем же именем, который я использую для вставки данных. Пожалуйста, предложите.

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:

1 Ответ

2 голосов
/ 10 июля 2020

FACTORY_INFO - это переменная PL / SQL, а не таблица. Таким образом, вы не можете использовать его в качестве цели для оператора SQL INSERT.

Аналогичным образом, поскольку FACTORY_INFORMATION - это тип записи PL / SQL, который вы не можете выбрать в 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 Справочнике есть целая глава, посвященная Записи и коллекции с множеством примеров их использования. Узнать больше

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...