曾经写过的存储过程,留以后做参考

本文介绍了一种在Oracle数据库中管理和更新触发器及序列的方法。通过创建或替换触发器来记录数据插入的时间戳,并展示了如何创建用户及其权限设置。此外,还提供了处理重复序列的解决方案,包括修改序列名称、创建新的序列以及删除旧序列的过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

  CREATE OR REPLACE TRIGGER "AERIALCM"."AAE_ATTR_DATA_TYPE_BI" BEFORE INSERT on AERIALCM.AAE_ATTR_DATA_TYPE  for each row DECLARE BEGIN :new.CREATED_TIMESTAMP := current_timestamp; END;

CREATE USER ALINEO_DB_USR
   IDENTIFIED BY ALINEO_DB_USR
   DEFAULT TABLESPACE ALINEO_TBLSPACE
   TEMPORARY TABLESPACE ALINEO_TEMP_TBLSPACE;

declare
  sequence_owner VARCHAR2(1000);

  sequence_name VARCHAR2(1000);

  new_sequence_name VARCHAR2(1000);

  sql_string VARCHAR2(1000);

  current_seq_value NUMBER(10) DEFAULT 1;

  cursor cur is
    select SEQUENCE_OWNER, SEQUENCE_NAME, LAST_NUMBER
      from ALL_SEQUENCES
     where SEQUENCE_NAME in (select SEQUENCE_NAME
                               from all_SEQUENCEs
                              group by SEQUENCE_NAME
                             having count(*) > 1)
     order by SEQUENCE_NAME;

BEGIN
  open cur;
  fetch cur
    into sequence_owner, sequence_name, current_seq_value;
  while cur%found loop
    dbms_output.put_line(sequence_owner);
    dbms_output.put_line(sequence_name);
 
    case sequence_owner
      when 'APPEAL' then
        select SUBSTR(REPLACE(sequence_name, 'SQ', concat('SQ_', 'APL')),
                      0,
                      30)
          into new_sequence_name
          from dual;
      when 'MEMBER' then
        select SUBSTR(REPLACE(sequence_name, 'SQ', concat('SQ_', 'MBR')),
                      0,
                      30)
          into new_sequence_name
          from dual;
      when 'PROVIDER' then
        if ('SQ_PROV_NETWORK' = sequence_name or
           'SQ_CUSTOM_FIELD' = sequence_name or
           'SQ_CUSTOM_FIELD_SEL' = sequence_name) then
          fetch cur
            into sequence_owner, sequence_name, current_seq_value;
          continue;
        else
          select SUBSTR(REPLACE(sequence_name, 'SQ', concat('SQ_', 'PROV')),
                        0,
                        30)
            into new_sequence_name
            from dual;
        end if;
      when 'CLNTLTTR' then
        select SUBSTR(REPLACE(sequence_name, 'SQ', concat('SQ_', 'CL')),
                      0,
                      30)
          into new_sequence_name
          from dual;
      when 'CORREMGMT' then
        select SUBSTR(REPLACE(sequence_name, 'SQ', concat('SQ_', 'CM')),
                      0,
                      30)
          into new_sequence_name
          from dual;
      when 'CODES' then
        fetch cur
          into sequence_owner, sequence_name, current_seq_value;
        continue;
      else
        select SUBSTR(REPLACE(sequence_name,
                              'SQ',
                              concat('SQ_', SUBSTR(sequence_owner, 0, 3))),
                      0,
                      30)
          into new_sequence_name
          from dual;
    END CASE;
    sql_string := 'CREATE SEQUENCE ' || sequence_owner || '.' ||
                  new_sequence_name ||
                  ' MINVALUE 1 MAXVALUE 999999999999999999999999999 INCREMENT BY 1 START WITH ' ||
                  current_seq_value || ' CACHE 20 NOORDER NOCYCLE';
 
    dbms_output.put_line(sql_string);
 
    EXECUTE IMMEDIATE sql_string;
 
    sql_string := 'GRANT SELECT ON ' || sequence_owner || '.' ||
                  new_sequence_name || ' TO ALINEOAPP';
 
    EXECUTE IMMEDIATE sql_string;
 
    sql_string := 'DROP SEQUENCE ' || sequence_owner || '.' ||
                  sequence_name;
 
    EXECUTE IMMEDIATE sql_string;
 
    fetch cur
      into sequence_owner, sequence_name, current_seq_value;
  end loop;
  close cur;
END;

DECLARE
OWNER VARCHAR2(100);
TRIGGERNAME VARCHAR2(100);
STRSQL VARCHAR2(1000);
CURSOR CUR IS SELECT TRIGGER_NAME FROM ALL_TRIGGERS WHERE OWNER='AERIALCM';
BEGIN
OPEN CUR;
FETCH CUR INTO TRIGGERNAME;
WHILE CUR%FOUND LOOP
   STRSQL := 'DROP TRIGGER AERIALCM.'||TRIGGERNAME;
   EXECUTE IMMEDIATE STRSQL;
   FETCH CUR INTO TRIGGERNAME;
   END LOOP;

   END;


CREATE OR REPLACE TRIGGER LEAVELINE_T
BEFORE INSERT OR UPDATE ON LEAVELINE
FOR EACH ROW
DECLARE NEXTVAL INTEGER;
BEGIN
SELECT MAXSEQ.NEXTVAL INTO NEXTVAL FROM DUAL;
:NEW.ROWSTAMP := NEXTVAL;
END;



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值