Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/87.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/lua/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 如何通过更新避免在concat中达到varchar2的最大大小_Sql_Oracle - Fatal编程技术网

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-不能超过该值。这是有保证的。