【问题标题】:sql oracle. procedure cursor loopssql 预言机。过程游标循环
【发布时间】:2012-03-05 12:15:09
【问题描述】:

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

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> 

请帮忙....

【问题讨论】:

  • 收到“过程创建时出现编译错误”消息后,您可以输入 SHOW ERRORS;(或仅输入 SHO ERR)来查看这些错误。事实上,我所有的 SQL create-procedure 脚本最后都包含SHOW ERRORS;:如果有错误,我当然想看看,如果没有,那么SHOW ERRORS; 只会打印“没有错误。 "
  • 顺便说一下,'NULL'NULL 不一样。 'NULL' 是四个字符的字符串; NULL 是一个特殊值,大致意思是“未知”或“不确定”。在 Oracle 中(虽然不是在其他 DBMS 中),''NULL 相同。
  • 警告:过程创建时出现编译错误。 SQL> 显示错误; PROCEDURE INIT_ACTOR_QUOTES 的错误:LINE/COL ERROR 7/2 PL/SQL:SQL 语句被忽略 7/9 PL/SQL:ORA-00925:缺少 INTO 关键字 9/2 PL/SQL:SQL 语句被忽略 9/10 PL/SQL: ORA-00928: 缺少 SELECT 关键字 SQL>
  • 请更新问题以添加该信息。
  • 你真的不应该删除你原来的问题来问一个新的问题。 SO 的全部意义在于提供问题的答案。通过删除文本,您删除了我的答案的实用性。如果您有一个新问题,您应该开始一个新线程。除此之外,您更有可能以这种方式获得新问题的答案。如果这个线程中的代码是相关的,你应该链接到它。

标签: sql oracle procedure user-defined-types


【解决方案1】:

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

第二个错误:当引用游标中的列时,我们必须引用我们正在将数据提取到的变量,即在您的名字错误的示例中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 功能的公认缩写,所以它只会引起混乱。

【讨论】:

    猜你喜欢
    • 2012-03-27
    • 2012-04-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多