sql - 使用两个子查询的结果更改 Oracle 序列
问题描述
我正在尝试使用两个子查询的结果来更改序列。我是 Oracle 的新手,并且坚持使用语法。如果可以的话,请帮我解决这个问题:
alter sequence COM_UPDN_BASE_FRMT_DTL_SEQ increment by ( (select max(id) from COM_UPDN_BASE_FRMT_DTL) - (select last_number from all_sequences where sequence_name = 'COM_UPDN_BASE_FRMT_DTL_SEQ') ) ;
执行此操作后,我收到“无效号码”错误。我在这里想念什么?
解决方案
您肯定需要 PL/SQL 和动态 SQL,但不要使用 LAST_NUMBER。
尝试这样的事情:
DECLARE
l_max NUMBER;
l_curr_seq_val NUMBER;
l_new_seq_val NUMBER;
l_curr_inc_bv number;
BEGIN
--Get max value from table
SELECT max(id) INTO l_max FROM COM_UPDN_BASE_FRMT_DTL;
--get current value from seq and current increment_by from dba_sequences
SELECT com_updn_base_frmt_dtl_seq.nextval,increment_by INTO l_curr_seq_val,l_curr_inc_bv FROM dba_sequences WHERE sequence_name = 'COM_UPDN_BASE_FRMT_DTL_SEQ' and sequence_owner=USER;
--If there is a difference, do the fix
if (l_curr_inc_bv != l_max-l_curr_seq_val) then
EXECUTE IMMEDIATE
'ALTER SEQUENCE com_updn_base_frmt_dtl_seq INCREMENT BY ' || (l_max - l_curr_seq_val);
SELECT com_updn_base_frmt_dtl_seq.nextval INTO l_new_seq_val from dual;
EXECUTE IMMEDIATE
'ALTER SEQUENCE com_updn_base_frmt_dtl_seq INCREMENT BY ' || (l_curr_inc_bv);
end if;
END;
/
推荐阅读
- javascript - 为什么打字稿编译器会在服务器启动时更改我的 tsconfig.json 文件?
- apache-kafka - Kafka 中的内部和外部通信
- c++ - 在 OpenCV 4 (c++) 中设置颜色限制轴,类似于 Matlab 的 CAXIS
- c++ - 如何使用 C++ 独立 ASIO 库
- angular - Angular 6 搜索引擎优化路由
- git - 使用 Git 搜索特定用户修改的给定文件夹中的文件
- php - seo 友好的 url 使用西里尔字符 х 字符,它总是得到 404。如何修复它?
- python - 我可以在 MacOS 上使用 Keras ImageDataGenerator().flow_from_directory 跳过文件吗?
- scala - 斯卡拉
.reduce 泛型类型的奇怪行为 - java - Spring Boot 测试 HttpMessageNotReadableException