我可以在 PL/SQL 中使用 IF 吗?

Jay*_*Kim 1 sql oracle plsql

我做了一个表格和四个序列。(一列一个序列,一列三个序列。)

CREATE TABLE abc (
  whole_number VARCHAR2(100) primary key,
  board_number VARCHAR2(100),
  board VARCHAR2(100),
  content VARCHAR2(100)
);
CREATE SEQUENCE whole_seq
  MINVALUE 1
  NOMAXVALUE
  INCREMENT BY 1 START WITH 1 
;

CREATE SEQUENCE notify_seq
  MINVALUE 1
  NOMAXVALUE
  INCREMENT BY 1 START WITH 1 
;
CREATE SEQUENCE product_seq
  MINVALUE 1
  NOMAXVALUE
  INCREMENT BY 1 START WITH 1 
;
CREATE SEQUENCE guide_seq
  MINVALUE 1
  NOMAXVALUE
  INCREMENT BY 1 START WITH 1 
;
Run Code Online (Sandbox Code Playgroud)

我想创建一个过程,为每行的 Whole_number 列添加 Whole_seq,如果 board 列获得“guide”,则为 board_number 列添加guide_seq。如果 board 列获得“notify”,则为 board_number 列发送 notification_seq。

现在已经完成了针对 Whole_number 列的一个过程。

CREATE OR REPLACE TRIGGER whole_number_trigger 
  BEFORE INSERT 
  ON abc FOR EACH ROW
  BEGIN
  SELECT whole_seq INTO :new.whole_number FROM dual;
END;  
/
Run Code Online (Sandbox Code Playgroud)

有人可以帮我制作一个程序,根据 ORACLE 中 board 列的值获得不同的顺序吗?另外,有没有办法在 Whole_number 列的序列号之前添加字符串“Board_”?

小智 5

CREATE OR REPLACE TRIGGER whole_number_trigger 
  BEFORE INSERT 
  ON abc FOR EACH ROW
  BEGIN
  SELECT 'Board_' || whole_seq.nextval INTO :new.whole_number FROM dual;
  IF :new.board = 'guide' THEN 
    SELECT guide_seq.nextval INTO :new.board_number FROM dual;
  ELSIF   :new.board = 'notify' THEN 
    SELECT notify_seq.nextval INTO :new.board_number FROM dual;
  END IF;
END;  
/
Run Code Online (Sandbox Code Playgroud)

  • 不需要选择;你可以做 `:new.whole_number :=guide_seq.nextval;` (至少在 11.2 及以上版本中;不记得在早期版本中是否可以) (2认同)