如果存在,Oracle重命名分区

时间:2018-03-20 12:59:55

标签: sql oracle plsql partition

我需要创建一个语句,只有在存在特定分区名称时才能运行以重命名分区,如果不存在则继续执行其他代码。

basic command  = ALTER TABLE TEST RENAME PARTITION P1 TO P2:

我看过以下内容但尚未提出解决方案

3 个答案:

答案 0 :(得分:2)

我取决于你的要求,但基本程序就是这个:

DECLARE
    PARTITION_DOES_NOT_EXIST EXCEPTION;
    PRAGMA EXCEPTION_INIT(PARTITION_DOES_NOT_EXIST, -2149); 
BEGIN

    BEGIN
        EXECUTE IMMEDIATE 'ALTER TABLE TEST RENAME PARTITION P1 TO P2';
    EXCEPTION 
        WHEN PARTITION_DOES_NOT_EXIST THEN NULL;
    END;

    ... ohter commands
END;

答案 1 :(得分:2)

您可以检查表USER_TAB_PARTITIONS中是否存在分区:

DECLARE
  v_p1_exists AS NUMBER;
  v_p2_exists AS NUMBER;
BEGIN
  SELECT COUNT(*)
    INTO v_p1_exists
    FROM user_tab_partitions
   WHERE table_name = 'TEST'
     AND partition_name = 'P1';
  SELECT COUNT(*)
    INTO v_p2_exists
    FROM user_tab_partitions
   WHERE table_name = 'TEST'
     AND partition_name = 'P2';
   IF (v_p1_exists <> 0) AND (v_p2_exists = 0) THEN
     EXECUTE IMMEDIATE 'ALTER TABLE TEST RENAME PARTITION P1 TO P2';
   END;
END;

答案 2 :(得分:0)

一个选项是将ALTER TABLE包含在其自己的BEGIN-END块中,并带有适当的异常处理部分。我有点愚蠢(什么时候有其他人,呃?);随意重写它是有意义的 - 它只是显示如何来做它。

所以:如果ALTER TABLE失败,它会引发一些错误;它将被捕获,处理,代码将继续执行。

begin
  begin
    execute immediate 'alter table test rename partition p1 to p2';
  exception
    when others then 
      -- ignore errors
      null;
  end;

  -- continue to execute other code
  ...
end;