0
我创建了一个包含多个约束(主键,外键等)的表。 Oracle使用代码名称自动生成索引(例如SYS_CO12345)。我想用专有名称重新命名索引。使用嵌套选择的Oracle更改索引
我知道如何识别索引名,使用要求,如
SELECT INDEX_OWNER || '.' || INDEX_NAME
FROM DBA_IND_COLUMNS
WHERE INDEX_OWNER = <my owner>
AND TABLE_OWNER = <my table>
AND TABLE_NAME = <my table>
AND COLUMN_NAME = <my column>;
我也知道如何重命名索引,使用要求,如
ALTER INDEX <index owner>.<index name>
RENAME TO <index owner>.<index new name>;
现在,我想喜欢将这两个请求合并为类似的东西:
ALTER INDEX
(
SELECT INDEX_OWNER || '.' || INDEX_NAME
FROM DBA_IND_COLUMNS
WHERE INDEX_OWNER = <my owner>
AND TABLE_OWNER = <my owner>
AND TABLE_NAME = <my table>
AND COLUMN_NAME = <my column>
)
RENAME TO <index owner>.<index new name>;
但我面临以下错误消息:
00953. 00000 - "missing or invalid index name"
*Cause: An index name of the form [ <identifier> . ] <identifier> is
expected but not present. If OIDINDEX clause, index name must be
<identifier>
*Action: Enter an appropriate index name.
关于如何编写正确的组合请求的任何想法?
非常感谢您的帮助!
编辑,从Multisync的建议后: 我写了下面的过程,它的工作原理。我不知道这是最佳的,但它能够完成任务......
DECLARE
index_owner_and_name VARCHAR2(30);
query2execute VARCHAR2(200);
CURSOR myCursor IS SELECT INDEX_OWNER || '.' || INDEX_NAME
FROM DBA_IND_COLUMNS
WHERE INDEX_OWNER = <my owner>
AND TABLE_OWNER = <my owner>
AND TABLE_NAME = <my table>
AND COLUMN_NAME = <my column>;
BEGIN
OPEN myCursor ;
FETCH myCursor INTO index_owner_and_name;
CLOSE myCursor ;
query2execute := 'ALTER INDEX ' || index_owner_and_name || ' RENAME TO <new index name>';
EXECUTE IMMEDIATE query2execute ;
END;
如果你想动态DDL看看EXECUTE IMMEDIATE – Multisync 2014-12-03 21:04:52
谢谢!根据您的建议,我设法编写了以下程序并完成了结果。我不确定它是最佳的,但它的工作原理。 – nouklea 2014-12-04 18:38:50