Sql 转换和更改Oracle表列

Sql 转换和更改Oracle表列,sql,database,oracle,plsql,data-dictionary,Sql,Database,Oracle,Plsql,Data Dictionary,具体问题我需要帮助 我需要编写一些Oracle数据库过程,接下来将执行以下操作: 接收表名作为参数 获取除主键外的所有具有数值(数字/bignumber/数字等)的字段 将这些列转换为最新格式 将这些新的格式化列添加到此表(我指的是ALTERTABLE Add列) 我该怎么做呢?因为帖子下面的所有评论都说,不可能将任何数字转换为日期。你们需要知道数字的格式是什么。下面是添加列和转换所有数字的示例过程,但它基于以下条件:数字以ddmmyyyy格式存储日期,例如12102014将给出日期2014

具体问题我需要帮助

我需要编写一些Oracle数据库过程,接下来将执行以下操作:

  • 接收表名作为参数
  • 获取除主键外的所有具有数值(数字/bignumber/数字等)的字段
  • 将这些列转换为最新格式
  • 将这些新的格式化列添加到此表(我指的是ALTERTABLE Add列)

我该怎么做呢?

因为帖子下面的所有评论都说,不可能将任何数字转换为日期。你们需要知道数字的格式是什么。下面是添加列和转换所有数字的示例过程,但它基于以下条件:数字以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;

嗯?所有这些列都是空的吗?如果不是,如何将-200这样的数字转换为日期?或者您需要与我们分享更多详细信息吗?Oracle中没有
bignumber
。我同意mathguy的观点,你如何将像-421E123这样的数字转换成日期?事实上,我不知道。A在我的大学里,我有这个惊人的任务。我认为这些列不能为空,我还考虑过将NOTNULL值转换为DATE格式。可能是这样的这是别人给你的任务吗?询问他们-存储了什么类型的数字?表中已经存在的数字是否为930216格式(例如),是否要求您将其解释为Oracle speak中的RRMMDD?你需要更多关于这些专栏的信息,并与我们分享,否则我看不出我们能提供什么帮助。祝你好运另一个问题是PL/SQL是否支持调用ALTERTABLE。我不确定。