【问题标题】:Function to rename partitions error重命名分区错误的功能
【发布时间】:2014-12-12 16:53:58
【问题描述】:

我正在尝试使用以下函数重命名分区表的分区:

create or replace 
function         MYFUNCTION(PSCHEMANAME in varchar2, PTABLENAME in varchar2,PINITNAME in varchar2) 
  return varchar2 
  is 

 DEFAULT_NAME varchar2(10);
 LRETVALUE VARCHAR2(1000):='0';
 EMESG varchar2(1000); 
 ECODE    NUMBER(38);

BEGIN
 FOR X IN (SELECT PARTITION_NAME, HIGH_VALUE FROM USER_TAB_PARTITIONS WHERE TABLE_NAME = 'PTABLENAME' AND PARTITION_NAME NOT LIKE 'PINITNAME_%')
 LOOP
   execute immediate 'select to_char('||X.HIGH_VALUE||'-1,''YYYYMMDD'') from dual' into DEFAULT_NAME;
   execute immediate 'alter table'|| PTABLENAME ||' rename partition '||X.PARTITION_NAME||' to PINITNAME_'||DEFAULT_NAME;
   LRETVALUE:= ('0-Successful');
        RETURN lretvalue;
 END LOOP;
  EXCEPTION
       when OTHERS then lretvalue := '1,Problem....'||sqlcode||','||sqlerrm||';
        RETURN lretvalue;
END MYFUNCTION;

我收到一条错误消息说..对 PL/SQL 函数的调用已完成,但未执行 RETURN 语句..

【问题讨论】:

    标签: sql oracle function plsql


    【解决方案1】:

    将 RETURN 置于循环之外:

    create or replace 
    function         MYFUNCTION(PSCHEMANAME in varchar2, PTABLENAME in varchar2,PINITNAME in varchar2) 
      return varchar2 
      is 
    
     DEFAULT_NAME varchar2(10);
     LRETVALUE VARCHAR2(256) := '0';
     EMESG varchar2(1000); 
     ECODE    NUMBER(38);
    
    BEGIN
     FOR X IN (SELECT PARTITION_NAME, HIGH_VALUE FROM USER_TAB_PARTITIONS WHERE TABLE_NAME = PTABLENAME AND PARTITION_NAME NOT LIKE 'PINITNAME_%')
     LOOP
       execute immediate 'select to_char('||X.HIGH_VALUE||'-1,''YYYYMMDD'') from dual' into DEFAULT_NAME;
       execute immediate 'alter table '|| PTABLENAME ||' rename partition '||X.PARTITION_NAME||' to PINITNAME_'||DEFAULT_NAME;
     END LOOP;
    
     LRETVALUE := ('0-Successful');
     RETURN LRETVALUE;
    
      EXCEPTION
           when OTHERS then RETURN '1,Problem....'||sqlcode||','||sqlerrm;        
    END MYFUNCTION;
    /
    

    【讨论】:

    • 是的,请参阅上面我编辑的答案,但在这种情况下,我会直接返回字符串
    • 我正在尝试执行函数 select MYFUNCTION('','','') from dual;我只是将结果显示为“0-成功”。但它实际上并没有执行该函数。
    • FOR X IN ... PTABLENAME 被引用 + 更改表缺少空格,再试一次
    猜你喜欢
    • 1970-01-01
    • 2015-10-22
    • 1970-01-01
    • 1970-01-01
    • 2014-05-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-08-04
    相关资源
    最近更新 更多