sql - 如何在 Oracle (PL SQL) 中重置标识列
问题描述
我需要编写一个脚本来将数据库中的所有自动递增字段重置为 0。
解决方案
我想分享解决问题的方法。
要获取表名列表,我执行以下操作:
SELECT T.TABLE_NAME FROM ALL_TAB_COLUMNS C
INNER JOIN ALL_TABLES T ON C.OWNER = T.OWNER AND C.TABLE_NAME = T.TABLE_NAME
WHERE T.OWNER = 'SCHEME'
AND C.DATA_DEFAULT IS NOT NULL
进一步在循环中,您可以生成动态sql,如下所示:
ALTER TABLE TABLE_NAME
MODIFY ID
GENERATED BY DEFAULT ON NULL AS IDENTITY (START WITH 1);
我们通过EXECUTE IMMEDIATE
.
下面是我项目中的一个例子:
PROCEDURE RESET_ALL_IDENTITY_COLUMNS IS
BEGIN
FOR TABLES_WITH_IDENTITY IN (SELECT T.TABLE_NAME FROM ALL_TAB_COLUMNS C
INNER JOIN ALL_TABLES T ON C.OWNER = T.OWNER AND C.TABLE_NAME = T.TABLE_NAME
WHERE T.OWNER = 'DZR'
AND C.DATA_DEFAULT IS NOT NULL)
LOOP
EXECUTE IMMEDIATE 'ALTER TABLE ' || TABLES_WITH_IDENTITY.TABLE_NAME || ' MODIFY ID GENERATED BY DEFAULT ' ||
'ON NULL AS IDENTITY (START WITH 1)';
END LOOP;
END;
祝你好运 :)
推荐阅读
- serialization - NestJS Schema First GraphQL 序列化
- html - 如何修复 html css 样式问题?
- c++ - VS 代码、GCC(MinGW/WinLibs)、Win10:#include
-> "#include 检测到错误。请更新您的 IncludePath",但 #include "[abs path]" 没问题 - r - 是否有 R 函数可以在树状图中添加点?
- javascript - 在 html 表中使用 javascript umlaute (ä,ö,ü) 对表进行排序
- android - 使程序正常运行,无需下载新的 gradle
- ruby - Ruby 使用 CSV 标头创建查找表
- android - 为什么在尝试使用 Firbase 登录命令时出现意外错误
- java - Java:按属性值过滤2个不同对象的集合
- reactjs - 在 Webpack 中自动导入 React?