我可以在PL/SQL中使用IF吗?
我做了一张桌子和四个序列。一个序列对应一列,三个序列对应一列我可以在PL/SQL中使用IF吗?,sql,oracle,plsql,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 WIT
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
;
我想创建一个过程,在每一行为整列添加整列,
如果board_number列获得“guide”,则board_number列的guide_seq和guide_seq。
如果board_number列获得“notify”,则为board_number列通知_seq
现在对整列进行一个程序
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;
/
有人能帮我制定一个程序,根据ORACLE中board列的值获取不同的序列吗?
另外,有没有办法在整列的序号之前添加字符串'Board'。这是一个你可以自己回答的问题,在主键前面加上'Board'是一个非常糟糕的主意。它会使键混乱,需要额外的检查约束来确保number元素保持唯一。它确实解释了键列区域字符串数据类型而不是数字类型的原因。有一个更好的方法来做到这一点,但它是一个不同的答案。请问一个单独的问题。哦,让两个不同的序列填充同一列是另一个坏主意。序列只是一个单调递增的序列:它没有任何信息。所以没有办法区分任意数字。同样,如果您真的想这样做,有一些变通方法,但大体上看,您需要重新考虑您的数据模型。我对你所说的有些观点也有相同的想法。谢谢我会考虑一下。这个问题你可以很容易地自己回答,在主键前面加上“Board_u2;”是一个非常糟糕的主意。它会使键混乱,需要额外的检查约束来确保number元素保持唯一。它确实解释了键列区域字符串数据类型而不是数字类型的原因。有一个更好的方法来做到这一点,但它是一个不同的答案。请问一个单独的问题。哦,让两个不同的序列填充同一列是另一个坏主意。序列只是一个单调递增的序列:它没有任何信息。所以没有办法区分任意数字。同样,如果您真的想这样做,有一些变通方法,但大体上看,您需要重新考虑您的数据模型。我对你所说的有些观点也有相同的想法。谢谢我会考虑的。不需要选择;您可以执行以下操作:new.whole_number:=guide_seq.nextval;至少在11.2及以上;我想不起在早期版本中是否可以。谢谢,现在,我可以根据您的代码了解如何使用if:无需进行选择;您可以执行以下操作:new.whole_number:=guide_seq.nextval;至少在11.2及以上;我想不起在早期版本中是否可以。谢谢,现在,我可以根据您的代码了解如何使用if:
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;
/