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

时间:2017-02-26 16:36:52

标签: oracle plsql

我正在尝试将数据插入到为数据仓库创建的时间维度表中。我设法将数据输出到服务器但无法插入表中。 我提供了重现相同错误的部分代码。我尝试了多种方法,包括:

  1. 将行类型从表名更改为游标名称(相同 错误)。
  2. 将光标(c1)放入SELECT语句中的/ AS变量中(相同的错误)。
  3. 我附上了运行代码的截图,使用DBMS_OUTPUT.PUT_LINE成功将其打印到屏幕上。

    Screenshot of successful Anonymous Block completed

    以下代码会生成以下错误报告: ORA-06550:第15行,第17栏: PL / SQL:ORA-00913:值太多了 ORA-06550:第15行,第5栏: PL / SQL:忽略SQL语句

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

    DECLARE  ---为时间维度表---

    中的列声明游标
    Plotly.newPlot('myDiv', [{x:x, y:y, type:'bar'}],{title:'title',xaxis: {title: 'abscissa'},yaxis:{title:'ordinate'},bargap:0});

    - 游标(c1)的Rowtype变量,用于在多列中插入值 -

        public static ImageSource SetImageSource(string uriPath)//.com/image or some path
        {
            // this method very good for mvvm ;)
            try
            {   
                //In Model - public ImageSource AccountPhoto { get; set; } 
                //AccountPhoto = SetImageSource("some path");
                return return new BitmapImage()
                {
                    CreateOptions = BitmapCreateOptions.IgnoreImageCache,
                    UriSource = new Uri(uriPath)
                };
            }
            catch
            {
                Debug.WriteLine("Bad uri, set default image.");
                return return new BitmapImage()
                {
                    CreateOptions = BitmapCreateOptions.IgnoreImageCache,
                    UriSource = new Uri("ms-appx:///Avatar/Account Icon.png")
                };
            }
        }
    

    BEGIN

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

    cursor c1 is SELECT 
    
        DAY_ID,DAY_TIME_SPAN,DAY_END_DATE AS r_time
    
        FROM time_calendar_dim_2; 
    

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

    r_time c1%rowtype;
    

1 个答案:

答案 0 :(得分: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, ...)

否则,如果您的表中的列被添加或删除,或者(更糟糕的是)列排序不是您期望的,那么您会感到非常惊讶。

相关问题