Oracle 重命名分区(如果存在)
Oracle rename partition if exists
我需要创建一个语句,可以 运行 仅当特定分区名称存在时才重命名分区,如果不存在则继续执行其他代码。
basic command = ALTER TABLE TEST RENAME PARTITION P1 TO P2:
我看了以下内容,但还没有想出解决办法
- Using IF ELSE in Oracle
- https://docs.oracle.com/cd/B28359_01/appdev.111/b28370/controlstructures.htm
一个选项是将 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;
这取决于您的要求,但基本程序是这样的:
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;
您可以检查分区是否存在于 table 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;
我需要创建一个语句,可以 运行 仅当特定分区名称存在时才重命名分区,如果不存在则继续执行其他代码。
basic command = ALTER TABLE TEST RENAME PARTITION P1 TO P2:
我看了以下内容,但还没有想出解决办法
- Using IF ELSE in Oracle
- https://docs.oracle.com/cd/B28359_01/appdev.111/b28370/controlstructures.htm
一个选项是将 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;
这取决于您的要求,但基本程序是这样的:
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;
您可以检查分区是否存在于 table 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;