Oracle 在类型记录中插入记录,并从类型中提取数据
我想将数据插入类型,并在过程中提取相同的数据。它显示的表视图并不存在,即使我创建了与插入数据时使用的名称相同的类型。请建议Oracle 在类型记录中插入记录,并从类型中提取数据,oracle,plsql,user-defined-types,Oracle,Plsql,User Defined Types,我想将数据插入类型,并在过程中提取相同的数据。它显示的表视图并不存在,即使我创建了与插入数据时使用的名称相同的类型。请建议 SET SERVEROUTPUT ON; DECLARE FACTORYID VARCHAR2(200); TYPE FACTORY_INFORMATION IS RECORD (FACTORYID VARCHAR2(1000), BILLINGDAY VARCHAR2
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:
工厂信息是PL/SQL变量,不是表。因此,不能将其用作SQL INSERT语句的目标 同样,由于FACTORY_信息是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参考》有一整章专门讨论记录和集合,其中有大量关于如何使用它们的示例 工厂信息是PL/SQL变量而不是表。因此,不能将其用作SQL INSERT语句的目标 同样,由于FACTORY_信息是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参考》有一整章专门讨论记录和集合,其中有大量关于如何使用它们的示例 读一下上面写的。表不存在,而不是类型。是的,这就是为什么我想知道什么不存在,因为类型名别名带有工厂名称,请阅读它所说的内容。表不存在,而不是类型。是的,这就是为什么我想知道什么是不存在的,因为类型名称别名带有工厂信息。实际上,我的要求是将数据存储在循环中的表中,并希望在循环中的同一个表中记录数据,并希望在每个循环周期中存储新值,所以有没有办法实现这一点。当然有。文档涵盖了该场景。但是,如果您希望答案更关注您的需求,请编辑您的问题,以准确解释您真正想要实现的目标。您想改变我的问题。我已经回答了您提出的问题。但你似乎没有发现这一点有帮助:如果是这样的话,你需要修改你的问题来解释你真正想要达到的目的。实际上,我的要求是在循环表中存储数据,在循环表中记录数据,在每个循环周期中存储新值,那么有没有办法做到这一点。当然有。文档涵盖了该场景。但是,如果您希望答案更关注您的需求,请编辑您的问题,以准确解释您真正想要实现的目标。您想改变我的问题。我已经回答了您提出的问题。但你似乎没有发现这一点有帮助:如果是这样的话,你需要修改你的问题来解释你真正想要达到的目标