oracle11g - 如何在 Oracle APEX 中重置序列或在没有序列和触发器的情况下自动填充我的 PK,每次删除数据时从数字 1 开始?
问题描述
我有这张桌子
TABLE "KEYWORD_RSLT"
( "ID" NUMBER PRIMARY KEY,
"SESSION_MONTH" VARCHAR2(40) NOT NULL ENABLE,
"PATIENT_NAME" VARCHAR2(50)
我有这个程序可以将数据导入我的表 KEYWORD_RSLT。
create or replace PROCEDURE "PR_KEYWORD_SEARCH" (v_patient_id NUMBER, v_keyWord varchar2)
IS
BEGIN
delete from KEYWORD_RSLT;
insert into KEYWORD_RSLT (SESSION_MONTH, PATIENT_NAME)
select distinct
to_char(s.SESSION_DATE, 'MM-YYYY') as SESSION_MONTH,
p.FIRST_NAME ||' '||p.LAST_NAME as PATIENT_NAME
from SESSIONS s,
CLIENTS p
where s.CLIENTS_ID = p.ID
and (s.CRITICAL_POINT like LOWER ('%'||v_keyWord||'%') and s.CLIENTS_ID = v_patient_id
or s.ACTIONS like LOWER ('%'||v_keyWord||'%') and s.CLIENTS_ID = v_patient_id);
END PR_KEYWORD_SEARCH;
我希望我的主键“ID”从 1 开始自动获取下一个可用数字,但是当我的程序从该表中删除所有数据时,我想从 1 重新开始。
我尝试使用序列(“SQ_KEYWORD_RSLT_INCREAMENT”)并触发,但我无法使用此代码从新过程中重置此序列:
alter sequence SQ_KEYWORD_RSLT_INCREAMENT restart start with 1;
每次删除所有数据时,如何从头开始自动填写我的 ID?
解决方案
你说我不能重置这个序列,但你没有说为什么,所以我假设你有一个错误。不能直接在 pl/sql 中执行 ddl 语句,但可以使用EXECUTE IMMEDIATE
.
CREATE SEQUENCE koen_s START WITH 1;
Sequence KOEN_S created.
SELECT koen_s.NEXTVAL FROM DUAL;
NEXTVAL
----------
1
BEGIN
EXECUTE IMMEDIATE 'ALTER SEQUENCE koen_s RESTART START WITH 1';
END;
/
PL/SQL procedure successfully completed.
SELECT koen_s.NEXTVAL FROM DUAL;
NEXTVAL
----------
1
推荐阅读
- android - 为什么 AndroidManifest.xml 中的“screenOrientation=sensorPortrait”不起作用?
- java - 通过嵌套实体列表查询实体
- angular - 在自定义 Angular 按钮组件中提交不提交表单
- python - 如果通过本地文件夹中的循环安装 python 包,则会出错
- arrays - 将数组从最低到最高 FORTRAN 排序
- python - 使用 bs4 python 抓取时不呈现完整的 HTML
- sql - Sql Server 复制运行缓慢
- javascript - 使用 http-proxy-middleware 包的自定义响应
- arrays - Hyperlegder 结构节点错误:2 未知:流已删除请求 GET /api/fabric/1_0/channels 的未处理错误:
- jquery - 如何从外部 jquery 平台调用 .net dll 中的方法?