Sql 如何通过更新避免在concat中达到varchar2的最大大小
我是甲骨文的新手。更新我正在使用的表时Sql 如何通过更新避免在concat中达到varchar2的最大大小,sql,oracle,Sql,Oracle,我是甲骨文的新手。更新我正在使用的表时 update my_table set column_name =concat(" ' ", column_name, "viewed by xxxx") where item_value=2. 每当有人查看时,都会附加此值。。。 现在我的问题是如何避免varchar(2)的最大大小,并设置它是否仅比其大小小50个字符。我在servlet中使用它 我的要求是..如果某个用户查看项目的值为2,则他的用户ID将通过将项目的值=2的列的现有值合并到我的表格
update my_table set column_name =concat(" ' ", column_name, "viewed by xxxx")
where item_value=2.
每当有人查看时,都会附加此值。。。
现在我的问题是如何避免varchar(2)的最大大小,并设置它是否仅比其大小小50个字符。我在servlet中使用它
我的要求是..如果某个用户查看项目的值为2,则他的用户ID将通过将项目的值=2的列的现有值合并到我的表格中,一句话,我不想在更新时丢失字段中的早期数据,并避免达到字段的最大大小,即varchar2(900)
如果字段达到最大大小,则现有数据将被新数据改写,否则它将是现有数据的浓缩。您应该创建一个存储过程,您将调用该存储过程来更新该字段。它将检查更新后的新大小,如果太大,则执行您需要的任何操作(例如,添加到存档表、修剪现有数据等) 只需使用SUBSTR:
update my_table set column_name
= SUBSTR(' '' ' || column_name || 'viewed by xxxx')
, 1, 900)
where item_value=2
p.S.concat只能接受2个参数-我已将您的代码转换为使用更简单的| |串联运算符
p.p.S.Oracle中的字符串文字由
“
而不是”
分隔。substr()函数将限制字符数,但如果concat函数的结果超过50个字符,则不清楚要执行什么操作。我不太清楚您的情况,但有时,字符串会像“查看者”“不是存储在数据库中,而是添加到UI中。xxxx将是person表的一个ID。也许另一个选项可以是插入到某个日志表中?这还添加了应用程序的使用方式、操作序列等信息。在substr的参数超过SQL之前,此操作将一直有效 内部限制为4000个字符。最好的选择是创建PL/SQL 程序有3个参数。然后在过程中使用concat字符串。PL/SQL对VARCHAR2s的内部限制是32KB。然后返回PL/SQL的substr的结果,而不是SQL的one@Ivan,这是真的,但在这种情况下,我们知道column_name
将永远不会超过900个字符,因此这将始终适合4000个字符。在这种情况下,如果现有字符串值超过900,会发生什么情况,它将被设置为新值还是更新将失败?..@raja,column\u name
的最大大小为900-不能超过该值。这是有保证的。