我有一个名为&#34的列; EMP_GROUP"在表中,varchar2(30)的长度。 我正在开发一个应用程序,其中许多资源将数据发送到我们的表中。 所以我想限制这个长度为30的列。 目前,当数据来自不同的资源时,它将允许输入长度超过30的记录。
请在这里帮助我如何限制此列只允许输入30个字符,如果数据长度超过30,则不允许。
答案 0 :(得分:1)
除非在尝试插入之前截断值,否则您将始终获得ORA-12899: value too large for column
。
这样做的方法是将表隐藏在某种API之后 - 例如所有插入都是通过一个程序调用来完成的,这个程序调用将执或者,您可以在表上创建一个视图,并使用替代触发器来处理截断。
答案 1 :(得分:0)
当您执行INSERT
时,您只需要SUBSTR
要插入的值。
INSERT INTO my_table ( emp_group )
VALUES ( SUBSTR( p_my_value, 1, 30 ) );
然而,正如Jeffrey指出的那样,您希望在您的应用程序中为这些插入添加单点;您应该应用于API背后的任何DML的概念。在Oracle数据库中使用PL / SQL作为数据访问层似乎是实现这一目标的合理方法。