sql oracle. procedure游标循环

x8diyxa7  于 2023-10-16  发布在  Oracle
关注(0)|答案(1)|浏览(109)

我创建了以下表格和类型....

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>

任何帮助请…

ni65a41a

ni65a41a1#

第一个错误:当插入到表中时,我们必须将值插入到 * 所有列 * 中,或者只指定我们正在填充的列。
第二个错误:当在游标中引用一个列时,我们必须引用我们正在获取数据的变量,即。row在你这个名字不好的例子中。
第三:当填充用户定义的类型时,我们必须在赋值中命名该类型。
第四:当填充一个嵌套表时,我们必须命名它和它收集的对象类型。
第五:嵌套表是表上的一列,因此应该在UPDATE语句中赋值,或者随后使用UPDATE。
所以你真正想要的是这样的东西:

insert into ACTOR_QUOTES
    (actorid, quote)s
 values
    ( row.actorid
      , AQ_NT ( 
           ACTOR_QUOTE_TYPE  
             ('Dirty Harry', 1970, 'Inspector Callahan', 'Do you feel lucky punk?')
          , ACTOR_QUOTE_TYPE  
             ('Sudden Impact', 1983, 'Inspector Callahan', 'Make my day')
        )
   );

顺便说一句,关于命名不当的变量,不要把任何东西叫做AQ。这是一个公认的缩写为甲骨文高级搜索功能,所以它只会造成一个世界的混乱。

相关问题