0

テーブルには、これまでの数値を含む列が含まれています。ここで、アルファベットの列に詳細を入力したいと思います。古いデータを失わずにどうすればよいのでしょうか?

元:

学生テーブルが作成され、値が挿入されます

ここでSFEEは、数値データ型が与えられています。

SNO SNAME SCOURSE SFEE
1    RAM   SQL     2100
2    JAM    JAVA   3000

SNO SNAME SCOURSE SFEE
1    RAM   SQL     2100
2    JAM    JAVA   3000
3    TOM    LINUX  AJAY

SELECT * FROM STUDENT;

SNO SNAME SCOURSE SFEE
1    RAM   SQL     2100
2    JAM    JAVA   3000
3    TOM    LINUX  AJAY
4

1 に答える 1

0

列が空の場合は、データ型を変更できます。

ALTER TABLE student MODIFY (sfee VARCHAR2(10));

あなたが言ったように、データを保持する必要がある場合は、列の名前を変更し、新しいデータ型で新しい列を追加し、データをコピーして、名前が変更された古い列を削除できます。

CREATE TABLE student (sno NUMBER, sname VARCHAR2(10), scourse VARCHAR2(10), sfee NUMBER);
INSERT INTO student VALUES (1, 'RAM', 'SQL', 2100);
INSERT INTO student VALUES (2, 'JAM', 'JAVA', 3000);

ALTER TABLE student RENAME COLUMN sfee TO sfee_old;
ALTER TABLE student ADD (sfee VARCHAR2(10));
UPDATE student SET sfee = TO_CHAR(sfee_old,'fm9999');
ALTER TABLE student DROP COLUMN sfee_old;

大きなテーブルの場合は、物理的に再構築することをお勧めします。

ALTER TABLE student MOVE;

SFEE文字列値を格納できるようになりました:

INSERT INTO student VALUES (3, 'TOM', 'LINUX', 'AJAY');
SELECT * FROM student;

巨大な本番テーブルの場合は、単純に新しいテーブルを作成することをお勧めします:

CREATE TABLE student_tmp AS 
SELECT sno, sname, scourse, to_char(sfee,'fm9999') as sfee FROM student;
DROP TABLE student;
RENAME student_tmp TO student;

最後の質問: SQL コースが Java コースよりも安いのはなぜですか ;-) ?

于 2012-12-01T11:47:49.983 に答える