C# Oracle在自定义字为空时触发?

C# Oracle在自定义字为空时触发?,c#,oracle,triggers,C#,Oracle,Triggers,我只想在用户在“table_id1”上的get null值自动更改时创建触发器,只插入“it's ok”。如何这样创建?另一种方法是在列上使用默认值: CREATE OR REPLACE TRIGGER auto_id before insert on CustomWord for each row declare max_id number; cur_seq number; begin if :new.table_id1, :new.table_id2, :new.t

我只想在用户在“table_id1”上的get null值自动更改时创建触发器,只插入“it's ok”。如何这样创建?

另一种方法是在列上使用默认值:

CREATE OR REPLACE TRIGGER auto_id
before insert on CustomWord
for each row
declare
    max_id number;
    cur_seq number;
begin
    if :new.table_id1, :new.table_id2,  :new.table_id3,  :new.table_id4 is null then
--HERE what should I get it?  Something  like tableid1 value = "it's ok"

        end loop;
    end if;
end;
/
而不是触发器。请注意,当INSERT语句中的列为
NULL
时,您需要省略这些列,除非您有Oracle 12c,在其中可以使用DEFAULT ON NULL子句

默认为空子句:

create table CustomWord 
...   
 table_id1 varchar2(30) default 'Ok',
...
要修改现有表,请执行以下操作:

create table CustomWord 
...   
 table_id1 varchar2(30) default on null 'Ok',

但是,我建议不要插入“It's ok”字符串,因为最好保留空值作为ok的证据。应根据值为null的事实,以人类可读的方式表示它是正常的。

如果您真的想通过触发器执行此操作(无论出于何种原因),它非常简单:

ALTER TABLE CustomWord MODIFY(table_id1 DEFAULT on null 'It''s ok');

那么在这种情况下,如何创建默认值呢?你能更具体地描述我吗?我只是读书,但没有更新。请注意,
INSERT
语句需要修改,以省略此解决方案备选方案中的相关列。这取决于这是否合适。您可能会争辩说,您还可以修改
INSERT
来插入某个字符串,而不是
NULL
。如果INSERT语句显式插入NULL,那么您将得到NULL。触发器的另一种替代方法是将NVL(表_id1,'It's ok')插入CustomWord。就个人而言,我不会插入这是ok字符串。你为什么想要它?在逻辑上,检查null比检查某个字符串更为严格。您可以使用NVL或使用视图根据空值向用户显示字符串。在insert语句中省略列的问题是,许多人经常使用不这样做的ORM。@ammoQ:我理解使用默认值可能不可行。谢谢我所需要的。。你为什么问“真的想要”?或者使用另一种方法是好的?如何使用该触发器包含所有列?“真的想要”,因为在表规范中设置默认值更容易。要对所有列执行此操作,请创建
的副本,如果。。。结束if
块并更改列名(在
if
条件和分配中)。抱歉,没有办法在所有列上循环。
CREATE OR REPLACE TRIGGER auto_id
before insert on CustomWord
for each row
begin
    if :new.table_id1 is null then
      :new.table_id1 := 'it''s ok';
    end if;
end;
/