由于ROW_NUMBER()OVER来自双功能,因此缺少此函数的窗口规范并收到错误

时间:2016-11-14 09:24:35

标签: oracle stored-procedures

  insert into att_sch_emp_tmp(
  COMPANYCODE, DIVISIONCODE, CATEGORYICSTABLECODE,
   CATEGORYCODE, CATEGORYTYPE,CODE,
   FACTORYCODE, DEPARTMENTDEPARTMENTCODE, SECTIONSECTIONICSTABLECODE,
   SECTIONSECTIONCODE, MATYPEMACHINETYPEICSTABLECODE, MACHINETYPEMACHINETYPECODE,
   MACHINENOMACHINENOICSTABLECODE, MACHINENOMACHINENOCODE, GRADEICSTABLECODE,
   GRADECODE, CADREICSTABLECODE, CADRECODE,
   DESGDESIGNATIONICSTABLECODE, DESGDESIGNATIONCODE, EMPROLECODE,
   SUBCTGSUBCATEGORYICSTABLECODE, SUBCATEGORYSUBCATEGORYCODE, FROMDATE,
   TODATE, CONFIRMATIONDATE, RESIGNDATE,
   JOININGDATE, CREATIONTIMESTAMP, SERIAL,
   COSTCENTERBADLICODE, HOLIDAYCODE, EFFECTIVEDATE,
   SHIFTROTATIONCODE, WEEKLYOFF, FREQUENCY,
   FREQUENCYDAYS 
  )
  select COMPANYCODE, DIVISIONCODE, CATEGORYICSTABLECODE,
         CATEGORYCODE, CATEGORYTYPE,CODE,
         FACTORYCODE, DEPARTMENTDEPARTMENTCODE, SECTIONSECTIONICSTABLECODE,
         SECTIONSECTIONCODE, MATYPEMACHINETYPEICSTABLECODE, MACHINETYPEMACHINETYPECODE,
         MACHINENOMACHINENOICSTABLECODE, MACHINENOMACHINENOCODE, GRADEICSTABLECODE,
         GRADECODE, CADREICSTABLECODE, CADRECODE,
         DESGDESIGNATIONICSTABLECODE, DESGDESIGNATIONCODE, EMPROLECODE,
         SUBCTGSUBCATEGORYICSTABLECODE, SUBCATEGORYSUBCATEGORYCODE, FROMDATE,
         TODATE, CONFIRMATIONDATE, RESIGNDATE,
         JOININGDATE, p_creationtimestamp, ROW_NUMBER() OVER from dual(),
         ' ', ' ', sysdate,
         ' ', 0, 0,
         0
  from  employee 

2 个答案:

答案 0 :(得分:2)

没有分区的正确语法:

SELECT ......
       ROW_NUMBER() OVER(ORDER BY 1) 
FROM ...

如果您希望按部门或W / E划分,则:

SELECT ......
       ROW_NUMBER() OVER(PARTITION BY YourColumn ORDER BY TheOrderColumn) 
FROM ...

答案 1 :(得分:0)

双重声明不正确。 Dual是一个表,您需要指定如何计算row_number。你可能需要:

select COMPANYCODE, DIVISIONCODE, CATEGORYICSTABLECODE,
         CATEGORYCODE, CATEGORYTYPE,CODE,
         FACTORYCODE, DEPARTMENTDEPARTMENTCODE, SECTIONSECTIONICSTABLECODE,
         SECTIONSECTIONCODE, MATYPEMACHINETYPEICSTABLECODE, MACHINETYPEMACHINETYPECODE,
         MACHINENOMACHINENOICSTABLECODE, MACHINENOMACHINENOCODE, GRADEICSTABLECODE,
         GRADECODE, CADREICSTABLECODE, CADRECODE,
         DESGDESIGNATIONICSTABLECODE, DESGDESIGNATIONCODE, EMPROLECODE,
         SUBCTGSUBCATEGORYICSTABLECODE, SUBCATEGORYSUBCATEGORYCODE, FROMDATE,
         TODATE, CONFIRMATIONDATE, RESIGNDATE,
         JOININGDATE, p_creationtimestamp, ROW_NUMBER() OVER (order by 1),
         ' ', ' ', sysdate,
         ' ', 0, 0,
         0
  from  employee;

如果您只想要没有任何指定分区或订单的行号,则可以将ROW_NUMBER() OVER (order by 1)替换为rownum。或者,如果您想要某个指定的订单,请按照表示订单的列名替换1

此外,您需要注意,当您第二次执行插入时,SERIAL将从1重新开始。如果您需要唯一的号码,请

create sequence serial_seq start with 1 increment by 1;

并使用:

select COMPANYCODE, DIVISIONCODE, CATEGORYICSTABLECODE,
         CATEGORYCODE, CATEGORYTYPE,CODE,
         FACTORYCODE, DEPARTMENTDEPARTMENTCODE, SECTIONSECTIONICSTABLECODE,
         SECTIONSECTIONCODE, MATYPEMACHINETYPEICSTABLECODE, MACHINETYPEMACHINETYPECODE,
         MACHINENOMACHINENOICSTABLECODE, MACHINENOMACHINENOCODE, GRADEICSTABLECODE,
         GRADECODE, CADREICSTABLECODE, CADRECODE,
         DESGDESIGNATIONICSTABLECODE, DESGDESIGNATIONCODE, EMPROLECODE,
         SUBCTGSUBCATEGORYICSTABLECODE, SUBCATEGORYSUBCATEGORYCODE, FROMDATE,
         TODATE, CONFIRMATIONDATE, RESIGNDATE,
         JOININGDATE, p_creationtimestamp, serial_seq.nextval,
         ' ', ' ', sysdate,
         ' ', 0, 0,
         0
  from  employee;