2016-10-16 20 views
-1

特定の質問についてはヘルプが必要です。Oracleテーブルの列の変換と変更

私は次に何をしますいくつかのOracleデータベースの手順を、記述する必要があります。

  • は、パラメータとしてテーブル名を受け取ります。
  • プライマリキー以外のすべてのフィールドを数値(数値/数字/数値/など)で取得します。
  • これらの列をDATE形式に変換します。
  • これらの新しいフォーマットされた列をこの表に追加します(つまり、ALTER TABLE ADD COLUMNを意味します)。

どうすればいいですか?

+2

Huh?これらの列はすべて空ですか?そうでない場合、-200のような数字をどのようにして日付に変換しますか?または、私たちと共有する必要がある詳細がありますか? – mathguy

+1

Oracleには「bignumber」はありません。そして私はmathguyに同意します。あなたはどのように-42、1e123のような数字を日付に変換しますか? –

+0

実際、私は知らない。私の大学にはこの素晴らしい仕事があります。私はこれらの列が空ではないと思っています。また、NULL以外の値をDATE形式に変換することも考えました。これのようなものかもしれないhttp://stackoverflow.com/questions/11883923/converting-number-to-date-in-oracle – b00blik

答えて

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; 
関連する問題