我创建了以下表格和类型....
CREATE TYPE ACTOR_QUOTE_TYPE AS OBJECT (
Movie_Title CHAR(36),
Year NUMBER,
Role CHAR(36),
Quote CHAR(255)
)
/
CREATE TYPE AQ_NT AS TABLE OF ACTOR_QUOTE_TYPE
/
CREATE TABLE ACTOR_QUOTES (
ACTORID CHAR(5),
QUOTES AQ_NT
) NESTED TABLE QUOTES STORE AS ACTOR_QUOTES_NT
/
我需要创建一个.....
一个名为INIT_ACTOR_QUOTES的PL/SQL过程,没有参数:
从ACTOR表中读取所有ACTORID,并将其转换为ACTOR_QUOTES表中每行的ACTORID属性(表具有相同的基数),同时将以下初始值转换为ACTOR_QUOTES嵌套表的第一行;
(Movie_Title,Year,Role,Quote)分别设置为(' ',NULL,' ',' ')
同时,在每次删除之后,立即使用删除从嵌套表中删除ACTOR_QUOTES表中属于每个ACTORID的每行中的所有行。
我得到了一个编译错误的代码.
CREATE OR REPLACE PROCEDURE INIT_ACTOR_QUOTES
AS
CURSOR actorID_cursor IS
SELECT actorID FROM Actor;
BEGIN
FOR row IN actorID_cursor LOOP
INSERT actorID INTO ACTOR_QUOTES;
INSERT INTO actor_Quotes_NT VALUES ('', NULL, ' ', '');
DELETE (*) FROM actor_Quotes_NT ('', NULL, ' ', '');
END LOOP;
END INIT_ACTOR_QUOTES ;
/
Warning: Procedure created with compilation errors.
SQL> show errors;
Errors for PROCEDURE INIT_ACTOR_QUOTES:
LINE/COL ERROR
-------- -----------------------------------------------------------------
7/2 PL/SQL: SQL Statement ignored
7/9 PL/SQL: ORA-00925: missing INTO keyword
9/2 PL/SQL: SQL Statement ignored
9/10 PL/SQL: ORA-00928: missing SELECT keyword
SQL>
任何帮助请…
1条答案
按热度按时间ni65a41a1#
第一个错误:当插入到表中时,我们必须将值插入到 * 所有列 * 中,或者只指定我们正在填充的列。
第二个错误:当在游标中引用一个列时,我们必须引用我们正在获取数据的变量,即。
row
在你这个名字不好的例子中。第三:当填充用户定义的类型时,我们必须在赋值中命名该类型。
第四:当填充一个嵌套表时,我们必须命名它和它收集的对象类型。
第五:嵌套表是表上的一列,因此应该在UPDATE语句中赋值,或者随后使用UPDATE。
所以你真正想要的是这样的东西:
顺便说一句,关于命名不当的变量,不要把任何东西叫做AQ。这是一个公认的缩写为甲骨文高级搜索功能,所以它只会造成一个世界的混乱。