Oracle存储过程使用输入和输出参数删除多个索引

时间:2018-06-11 23:02:41

标签: oracle stored-procedures

我需要开发2个Oracle存储过程,一个用于删除索引,另一个用于创建索引,因此我可以在应用程序中调用它们。

我试过这样的事情 - 但是我的应用程序说它没有输出参数并且在并行选项时也有错误

CREATE OR REPLACE PROCEDURE CLEAR_INDEX(INDEX_NAME1 IN VARCHAR2, INDEX_NAME2 IN VARCHAR2) AS
BEGIN
    --EXECUTE IMMEDIATE 'drop index ' || INDEX_NAME1 'parallel';
     EXECUTE IMMEDIATE 'drop index ' || INDEX_NAME2 'parallel';
EXCEPTION
    WHEN OTHERS THEN
        NULL;
END CLEAR_INDEX;

1 个答案:

答案 0 :(得分:0)

如果我已正确理解了这个问题,你想删除并创建索引,然后在索引操作成功时返回布尔值true,如果失败则返回false。这里的自然构造是一个功能:

CREATE OR REPLACE FUNCTION CLEAR_INDEX
   (   INDEX_NAME1 IN VARCHAR2,
       INDEX_NAME2 IN VARCHAR2 )
   RETURN BOOLEAN AS
BEGIN
    EXECUTE IMMEDIATE 'drop index ' || INDEX_NAME1;
    EXECUTE IMMEDIATE 'drop index ' || INDEX_NAME2;
    RETURN ( TRUE ):
EXCEPTION
    WHEN OTHERS THEN
        RETURN ( FALSE );
END CLEAR_INDEX;

如果你坚持要求程序:

CREATE OR REPLACE PROCEDURE CLEAR_INDEX
   (   INDEX_NAME1 IN VARCHAR2,
       INDEX_NAME2 IN VARCHAR2,
       IT_WORKED   OUT BOOLEAN )
BEGIN
    IT_WORKED := FALSE;
    EXECUTE IMMEDIATE 'drop index ' || INDEX_NAME1;
    EXECUTE IMMEDIATE 'drop index ' || INDEX_NAME2;
    IT_WORKED := TRUE;
EXCEPTION
    WHEN OTHERS THEN
       IT_WORKED := FALSE;
END CLEAR_INDEX;

注意parallel选项是如何被删除的,因为没有并行删除这样的东西。丢弃对象通常会立即发生,没有理由并行化操作。