PL-SQL 操作列和插入
Posted
技术标签:
【中文标题】PL-SQL 操作列和插入【英文标题】:PL-SQL manipulate column and insert 【发布时间】:2014-04-04 13:22:44 【问题描述】:我在现有表中添加了新列,我的目标是在一些操作后使用现有列的数据将数据插入新列,例如添加前缀。新的和现有的列的类型是字符串。 我该如何执行? 我不知道plsql。对于这种情况,SQL 就够了吗?
【问题讨论】:
如果您提供一个您希望在新列中填充的数据示例,将会有所帮助。 oldcloumn --> 5324351223 newcloumn --> +905324351223 【参考方案1】:我这里没有 PL/SQL,所以无法测试,但应该很容易。
让我们从改变表格开始:
ALTER TABLE table_name
ADD new_column varchar2(50);
那么,让我们更新一下吧。
我们将首先添加 old_column 中不以前缀开头的所有值。
UPDATE table_name t1
SET t1.new_column = 'prefix' || t1.old_column
WHERE t1.old_column NOT LIKE 'prefix%';
然后,我们可以简单地从 old_column 中复制已经有前缀的值
UPDATE table_name t1
SET t1.new_column = t1.old_column
WHERE t1.old_column LIKE 'prefix%';
【讨论】:
非常感谢,它节省了时间。我可以控制oldcloumn的数据吗,它可能已经添加了前缀,如果oldcloumn有前缀我必须插入新的cloumn而不添加前缀 当然。我可以使用 2 个更新吗?这种方式更容易,因为我无法测试代码。 刚刚编辑了我的答案,看看吧。在尝试一切正常之前不要忘记删除新列?【参考方案2】:只需更新表中的所有记录。
可以一次性遍历所有记录:
update existing_table
set
newcolumn = case
when (length(oldcolumn) = 13) and (oldcolumn like '+%')
then oldcolumn
when (length(oldcolumn) = 12) and (oldcolumn like '90%')
then '+' || oldcolumn
when (length(oldcolumn) = 10) and not (oldcolumn like '+%')
then '+90' || oldcolumn
else '?'
end
更新后可以检查无效转化:
select oldcolumn, newcolumn
from existing_table
where newcolumn = '?'
并更正case
条件或一一更新剩余记录。
【讨论】:
我们可以添加新案例吗?例如,如果它以 05324351223 开头,在这种情况下只应添加 +9。 当然,请查看documentation 并在我的回答中更新示例。但是在定义条件顺序时必须小心,因为 Oracle 会选择第一个匹配的变体。以上是关于PL-SQL 操作列和插入的主要内容,如果未能解决你的问题,请参考以下文章
在WPS或Excel中多列合并成一列合并后中间加空格或-或逗号的写法,可参照以下方法,wps与excel操作与用法都相同