首页 文章

ORA-00913使用显式游标将pl / sql值过多

提问于
浏览
-2

我正在尝试将数据插入到我为数据仓库创建的时间维度表中 . 我设法将数据输出到服务器但无法插入表中 . I have supplied partial code that reproduces the same error . 我尝试过多种方式,包括:

  • 将行类型从表名更改为游标名(相同错误) .

  • 将游标(c1)放入SELECT语句中的/ AS变量中(相同的错误) .

我已附上运行代码的屏幕截图,使用DBMS_OUTPUT.PUT_LINE将其成功打印到屏幕上 .

Screenshot of successful Anonymous Block completed

The below code produces the following error report: ORA-06550:Line 15, column 17: PL/SQL:ORA-00913: too many values ORA-06550: line 15, column 5: PL/SQL: SQL Statement ignored

---以下脚本填充标准日历的时间维度表 . ---

DECLARE ---为时间维度表中的列声明游标---

cursor c1 is SELECT 

    DAY_ID,DAY_TIME_SPAN,DAY_END_DATE AS r_time

    FROM time_calendar_dim_2;
  • 游标的循环变量(c1)在多列中插入值 -
r_time c1%rowtype;

BEGIN

---启动循环以插入多行 -

FOR r_time IN c1 LOOP

---将值插入时间维度表---

INSERT INTO time_calendar_dim_2(DAY_ID,DAY_TIME_SPAN,DAY_END_DATE)            
VALUES
 (SEQ_Time_Dim_IDSTART.nextval,r_time.DAY_ID,r_time.DAY_TIME_SPAN,r_time.DAY_END_DATE);      

    **END LOOP;

 END;**
 /

1 回答

  • 2

    据推测,这一行:

    INSERT INTO time_calendar_dim_2 VALUES    (SEQ_Time_Dim_IDSTART.nextval,r_time.DAY_ID,r_time.DAY_TIME_SPAN,r_time.DAY_END_DATE,r_time.WEEK_DAY_FULL,r_time.WEEK_DAY_SHORT,r_time.DAY_NUM_OF_WEEK,r_time.DAY_NUM_OF_MONTH,r_time.DAY_NUM_OF_YEAR,r_time.MONTH_ID,r_time.MONTH_TIME_SPAN,r_time.MONTH_END_DATE,r_time.MONTH_SHORT_DESC,r_time.MONTH_LONG_DESC,r_time.MONTH_SHORT,r_time.MONTH_LONG,r_time.MONTH_NUM_OF_YEAR,r_time.QUARTER_ID,r_time.QUARTER_TIME_SPAN,r_time.QUARTER_END_DATE,r_time.QUARTER_NUM_OF_YEAR,r_time.HALF_NUM_OF_YEAR,r_time.YEAR_ID,r_time.YEAR_TIME_SPAN,r_time.YEAR_END_DATE);
    

    失败是因为你提供的值多于你的 time_calendar_dim_2 列(如果没有time_calendar_dim_2的DDL语句,很难说 .

    此外,您应始终在 INSERT 语句中显式枚举目标列,而不是

    INSERT INTO time_calendar_dim_2 
      VALUES (SEQ_Time_Dim_IDSTART.nextval, ...)
    

    使用

    INSERT INTO time_calendar_dim_2 (idstart, ..) 
      VALUES (SEQ_Time_Dim_IDSTART.nextval, ...)
    

    否则,如果添加或删除表中的列,或者(更糟糕的是)列排序不符合您的预期,您就会感到非常惊讶 .

相关问题