我是oracle的新手,我正在尝试在插入地址之前向表中写入触发器。我该怎么检查是否有空格''保存到列。
IF LENGTH((:NEW.ADDRESS))=1 and LENGTH(trim(:NEW.ADDRESS))>LENGTH((:NEW.ADDRESS)) Then
--Do Something
END IF;
所以我的问题是修剪(:NEW.ADDRESS),修剪整个触发器代码的空间还是仅修剪特定部分?就好像我必须在下面某处使用(:NEW.ADDRESS)它是否有原始空间?
喜欢,我们假设我们有
:NEW.ADDRESS='TEMP '
where LENGTH((:NEW.ADDRESS))=5
and LENGTH(trim(:NEW.ADDRESS)) =4
所以,如果我必须在这行代码之后使用它,那么它的价值是什么:NEW.ADDRESS? ' TEMP'(Len 4)或' TEMP'(Len 5)
答案 0 :(得分:3)
所以我的问题是修剪(:NEW.ADDRESS),修剪整个触发器代码的空间还是仅修剪特定部分?就像我必须在下面某处使用(:NEW.ADDRESS)它是否有原始空间?
The TRIM()
function不会影响传入的值。它返回已修剪的值的副本。您可以使用文字或表达式的结果来调用它,而不仅仅是变量,并且无法修改它们。
因此,如果您再次引用:NEW.ADDRESS
,它将仍然是相同的,具有任何前导或尾随空格。实际存储在表中的值将包含空格。
当然,这很容易验证自己。
如果要修改要插入的值,则需要指定它:
:NEW.ADDRESS := trim(:NEW.ADDRESS);
如果你早点这样做,你不必在检查长度之前再次修剪它。实际存储在表中的值不会不包含空格。但是,除非您制作本地副本,否则您无法看到原始未修剪的值。