我有 PL/SQL 匿名块,它创建一个表(使用execute immediate
),然后将数据插入到表中。
当块编译时,它给了我一个ORA-00942: table or view does not exist错误。
好吧,不,它不存在,但它会在插入发生之前创建。如果我在编译之前创建表,它将起作用。
我该如何处理?
我有 PL/SQL 匿名块,它创建一个表(使用execute immediate
),然后将数据插入到表中。
当块编译时,它给了我一个ORA-00942: table or view does not exist错误。
好吧,不,它不存在,但它会在插入发生之前创建。如果我在编译之前创建表,它将起作用。
我该如何处理?
一般来说,在匿名块中创建表是没有意义的,更不用说在同一个匿名块中将数据插入到这些表中了。在运行时创建新对象是个坏主意(希望您不要像使用其他数据库那样尝试创建临时表)。
如果您确实需要在运行时创建一个新表,您也可以通过使用动态 SQL 进行
INSERT
操作,将数据插入同一个匿名块中。每次在同一个匿名块中引用新创建的表时,都需要使用动态 SQL。您还可以在一个匿名 PL/SQL 块中创建表,然后将数据插入到第二个匿名 PL/SQL 块中。那将不需要该INSERT
语句使用动态 SQL。由于从评论中听起来像是您正在尝试像在其他数据库中一样创建临时表,因此您可能想看看这个 StackOverflow 线程,该线程讨论了在 Oracle 中创建临时表的替代方案。