我需要创建一个语句,只有在存在特定分区名称时才能运行以重命名分区,如果不存在则继续执行其他代码。
basic command = ALTER TABLE TEST RENAME PARTITION P1 TO P2:
我看过以下内容但尚未提出解决方案
答案 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;