sql 甲骨文。程序光标循环

问题描述 投票:0回答:1

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

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 属性中(这些表具有相同的基数),同时将以下初始值插入到 QUOTES 嵌套表的第一行中进入 ACTOR_QUOTES 表的每一行;

(Movie_Title, Year, Role, Quote) 分别设置为 (' ',NULL ,' ', ' ')

此外,在每次 INSERT 之后立即使用 DELETE 删除嵌套表中属于 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> 

请帮忙......

sql oracle procedure user-defined-types
1个回答
3
投票

第一个错误:插入表时,我们必须将值插入所有列,否则只需指定我们要填充的列。

第二个错误:当引用游标中的列时,我们必须引用我们正在获取数据的变量,即您命名不当的示例中的

row

第三:填充用户定义类型时,我们必须在赋值中命名该类型。

第四:填充嵌套表时,我们必须命名它及其收集的对象类型。

第五:嵌套表是表上的一列,因此应在 INSERT 语句中分配,或随后使用 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。这是 Oracle Advance Queuing 功能的公认缩写,因此它只会引起混乱。

© www.soinside.com 2019 - 2024. All rights reserved.