转换和更改Oracle表列

时间:2016-10-16 14:09:59

标签: sql database oracle plsql data-dictionary

我需要特定问题的帮助。

我需要编写一些Oracle数据库程序,接下来会这样做:

  • 接收表名作为参数;
  • 除主键外,使用数值(数字/ bignumber /数字/等)的所有字段;
  • 将这些列转换为DATE格式;
  • 将这些新格式化列添加到此表(我的意思是ALTER TABLE ADD COLUMN)。

我该怎么做?

1 个答案:

答案 0 :(得分:1)

由于以下所有评论都表示无法将任何数字转换为日期。你需要知道什么是数字格式。下面是添加列并转换所有数字的示例程序,但它基于数据以ddmmyyyy格式存储日期的条件,例如12102014将给出日期2014年10月12日,但如果数字具有其他格式的日期,则将引发异常。

create or replace procedure columns_change(t_name in varchar2) as
col varchar2(30);
begin
for x in (select column_name from all_tab_columns where table_name = t_name and data_type in ('NUMBER'/*add whatever you need*/)) loop
col := x.column_name;
if (length(col)> 29) then --that's to avoid extending name to more than 30 characters
col := substr(col,1,29);
end if;
execute immediate 'alter table ' || t_name || ' add d' || col || ' date';
execute immediate 'update ' || t_name || ' set ' || col || ' = to_date(' || x.column_name || ',''ddmmyyyy'')';
end loop;
end;