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 操作列和插入的主要内容,如果未能解决你的问题,请参考以下文章

列和行操作 Python Pandas

SQL - 对表的列和的操作

Wpf DataGrid插入列,列的类型问题

CLOB 列和 SQL 插入文件

在WPS或Excel中多列合并成一列合并后中间加空格或-或逗号的写法,可参照以下方法,wps与excel操作与用法都相同

Oracle - 故障转移表或查询操作