Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/oracle/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
我可以在PL/SQL中使用IF吗?_Sql_Oracle_Plsql - Fatal编程技术网

我可以在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;  
/