每次删除数据时,如何在 Oracle APEX 中重置序列或在没有序列和触发器的情况下自动填充我的 PK,从数字 1 开始?
How do I reset a sequence in Oracle APEX or fill my PK automatically without sequence and trigger, starting from number 1 every time i delete my data?
我有这个table
TABLE "KEYWORD_RSLT"
( "ID" NUMBER PRIMARY KEY,
"SESSION_MONTH" VARCHAR2(40) NOT NULL ENABLE,
"PATIENT_NAME" VARCHAR2(50)
我有这个程序可以将数据导入我的 table 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 开始的下一个可用数字,但是当我的程序从这个 table 中删除所有数据时,我想从 1 重新开始。
我尝试使用序列 ("SQ_[=22=]_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
我有这个table
TABLE "KEYWORD_RSLT"
( "ID" NUMBER PRIMARY KEY,
"SESSION_MONTH" VARCHAR2(40) NOT NULL ENABLE,
"PATIENT_NAME" VARCHAR2(50)
我有这个程序可以将数据导入我的 table 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 开始的下一个可用数字,但是当我的程序从这个 table 中删除所有数据时,我想从 1 重新开始。
我尝试使用序列 ("SQ_[=22=]_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