我需要开发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;
答案 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
选项是如何被删除的,因为没有并行删除这样的东西。丢弃对象通常会立即发生,没有理由并行化操作。