在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
我想将数据插入到 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