转换和更改 Oracle table 列
Converting and altering Oracle table columns
我需要有关特定问题的帮助。
我需要编写一些 Oracle 数据库程序,接下来要做的是:
- 接收一个table名字作为参数;
- 获取除主键外所有具有数值 (number/bignumber/numeric/etc.) 的字段;
- 将这些列转换为 DATE 格式;
- 将这些新的格式化列添加到此 table(我的意思是 ALTER TABLE ADD COLUMN)。
我该怎么做?
正如下面的所有评论 post 所说,无法将任何数字转换为日期。你需要知道什么是数字格式。下面是添加列和转换所有数字的示例过程,但它基于数字以 ddmmyyyy 格式存储日期的条件,例如 12102014 将给出日期 12-Oct-2014,但如果数字具有其他格式的日期,它将引发异常。
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;
我需要有关特定问题的帮助。
我需要编写一些 Oracle 数据库程序,接下来要做的是:
- 接收一个table名字作为参数;
- 获取除主键外所有具有数值 (number/bignumber/numeric/etc.) 的字段;
- 将这些列转换为 DATE 格式;
- 将这些新的格式化列添加到此 table(我的意思是 ALTER TABLE ADD COLUMN)。
我该怎么做?
正如下面的所有评论 post 所说,无法将任何数字转换为日期。你需要知道什么是数字格式。下面是添加列和转换所有数字的示例过程,但它基于数字以 ddmmyyyy 格式存储日期的条件,例如 12102014 将给出日期 12-Oct-2014,但如果数字具有其他格式的日期,它将引发异常。
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;