oracle怎么在数字列中添加空格
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了oracle怎么在数字列中添加空格相关的知识,希望对你有一定的参考价值。
例:列值:888997.78
用sql语句,最终输出:8 8 8 9 9 7 . 7 8的效果,就是在每个数字中都放一个空格包括点
COL
------------------
8 8 8 9 9 7 . 7 8
SQL>
后面的 \\1 是引用正则表达式的第一个组
参考技术A SELECT trim(regexp_replace(888997.78,'(\d|.)','\1 ')) col FROM dual;搞个变量传入,可以实现任何数字的处理吧 参考技术B select regexp_replace(12.67, '(.)(.)(.)(.)(.)', '\1 \2 \3 \4 \5') from dual;
select regexp_replace(123.678, '(.)(.)(.)(.)(.)(.)(.)', '\1 \2 \3 \4 \5 \6 \7') from dual;
位数不定就不好弄啊
编译触发器时出现 Oracle 错误 ORA-00922
【中文标题】编译触发器时出现 Oracle 错误 ORA-00922【英文标题】:Oracle Error ORA-00922 While Compiling Trigger 【发布时间】:2020-08-17 13:49:25 【问题描述】:我在表中有一个 varchar2 数据类型列。用户只能在该列中插入数字,我不想更改为数字。有时在手动插入此列的数据时,用户可以在列中留出空格。我创建了一个触发器来避免它。我写的触发器如下。
CREATE OR REPLACE trigger_name
BEFORE INSERT ON table
FOR EACH ROW
BEGIN
IF :new.column != TRIM(:new.column) THEN
:new.column := TRIM(:new.column);
ELSE
dbms_output.put_line(:new.column || ' is suitable for jobid');
END IF;
END;
编译上述代码时出现如下错误。
“ORA-00922:缺少或无效选项”
提前致谢。
【问题讨论】:
不幸的是,它不断出错。我也删除了 8 号末尾的分号,但我无法修复它。 首先,我只删除了第 6 次,但出现错误。然后我也删除了第8个,但是我又出错了。 对不起,我看错了,在 CREATE OR REPLACE 之后缺少 TRIGGER 关键字的语法存在问题,我认为表名应该是一个代表。由于无法创建名称为 table 的表。您需要该列的浮点数,还是只需要数字(整数)? 不客气。如果您坚持不更改数据类型,我认为添加检查约束可能比使用触发器更好。您需要该列的浮点数,还是只需要数字(整数)? 您的触发器不会从输入的数据中删除所有空格;使用时,TRIM 会删除前导和尾随空格。但是,第一个数字和最后一个数字之间不会有任何空格。所以字符串'123'变成'123',字符串'12 3'没有,空格仍然存在。另外,您如何使用户无法输入其他非数字字符。如果你能做到这一点,为什么不也不允许进入空间。顺便说一句,您的触发器可以简化为单行 :new.column := trim(:new.column); 以产生完全相同的结果,除了开发之外没人会看到的消息. 【参考方案1】:错误ORA-00922
是由缺少关键字TRIGGER
引起的,正如Barbaros Özhan所指出的那样。只需添加它,假设您的表名和列名正确,那么就可以了。
但进一步查询,您似乎想替换用户为该列输入的所有空格。如果是这样,这个触发器可以做到:
CREATE OR REPLACE TRIGGER trigger_name
BEFORE INSERT ON table_name
FOR EACH ROW
BEGIN
IF :new.column_name != REPLACE(:new.column_name,' ','') THEN
:new.column_name := REPLACE(:new.column_name,' ','');
ELSE
dbms_output.put_line(:new.column_name|| ' is suitable for jobid');
END IF;
END;
我添加了缺少的关键字trigger
。
只需将 table_name
和 column_name
替换为正确的名称即可。
【讨论】:
以上是关于oracle怎么在数字列中添加空格的主要内容,如果未能解决你的问题,请参考以下文章