我试图更改表格,将charachter X
添加到表格中某一行的每个项目中。
我需要将字段下表中的所有事务中断为40个字符,这需要使用批处理执行的DML语句来完成。第40个字符应设置为X
- 以显示它已被缩短。
目前我正在尝试使用SUBSTR
试用一种更新行的方法
注意:在下面的示例中只是一些尝试和错误尝试,我在SQL小提琴中创建了一个示例表,因为我还不允许在主表上更新
UPDATE test SET tester = SUBSTR(tester , 40, 1) + 'x';
然而,这会在所有实例上回归NULL
我试过了
UPDATE test SET tester = tester + SUBSTR(tester , 40, 1) + 'x';
然而,这(在fiddler中构建schem时)返回
Schema Creation Failed: ORA-01722: invalid number
我尝试浏览谷歌和oracle数据字典,但是我的研究技巧是裤子,我可以具体看哪些想法?
我找到this,但我在实施
时遇到了问题任何想法都会有所帮助。
由于
答案 0 :(得分:1)
我有这个工作:
UPDATE test SET tester = SUBSTR(tester,1,40) || 'X';
使用+
代替||
简直不敢相信我花了将近1小时来解决这个问题! Live'n'learn我猜! :)
答案 1 :(得分:1)
连接运算符为||
,而不是+
。你也有你的子串参数错误的方式;并且您可能只想将其应用于以40个字符开头的值:
UPDATE test
SET tester = SUBSTR(tester, 1, 39) || 'X'
WHERE LENGTH(tester) > 40;
只有在必须缩短时,才会将第40个字符设置为X
。 (当然,如果你的原始值恰好是40个字符并且已经在X
中结束,那么你将无法判断它是否被截断了。)
使用起始数据:
SELECT tester, LENGTH(tester) FROM test;
TESTER LENGTH(TESTER)
-------------------------------------------------- --------------
abcdefghijklmnopqrstuvwxy 39 char value 39
abcdefghijklmnopqrstuvwxyz 40 char value 40
abcdefghijklmnopqrstuvwxyza 41 char value 41
abcdefghijklmnopqrstuvwxyzab 42 char value 42
abcdefghijklmnopqrstuvwxyzabcdefghij 50 char value 50
更新三行并离开:
SELECT tester, LENGTH(tester) FROM test;
TESTER LENGTH(TESTER)
-------------------------------------------------- --------------
abcdefghijklmnopqrstuvwxy 39 char value 39
abcdefghijklmnopqrstuvwxyz 40 char value 40
abcdefghijklmnopqrstuvwxyza 41 char valX 40
abcdefghijklmnopqrstuvwxyzab 42 char vaX 40
abcdefghijklmnopqrstuvwxyzabcdefghij 50X 40