Iseng.. iseng ah.. buat ngingetin diri sendiri kalau lupa.. and sekalian sharing mengenai pengalaman beberapa waktu yang lalu ..sudah cukup lama sih..kurang lebih tahun lalu ... waktu mau mindahin table dengan datatype LONG .. eh .. koq gak bisa pake cara yang biasa... :)
Tahukah anda ? bahwa table dengan LONG datatype tidak dapat dicopy dengan menggunakan cara : "CREATE TABLE AS SELECT" syntax. Tetapi hal ini tetap dapat dilakukan, yaitu dengan SQL*Plus COPY command.
Anda mungkin menjalankan Oracle 10g Release 2, tapi aplikasi yang dijalankan mungkin disupport oleh versi Oracle sebelumnya. Table yang dibuat dengan versi Oracle terdahulu sampai dengan 8i sering menggunakan LONG data type untuk menyimpan data text dalam jumlah besar.
Jika anda ingin melakukan copy table yang menggunakan type data LONG, maka perintah CREATE TABLE AS SELECT tidak akan bekerja; dan akan menampilkan pesan error: ORA-00997: illegal use of LONG datatype.
Anda dapat melakukan export table dan mengimpornya kembali, tetapi itu membutuhkan usaha yang lebih. COPY command di SQL*Plus tetap dapat melakukan copy table dengan satu perintah. Berikut ini adalah format dari COPY command :
COPY FROM user/pw@dblink TO user/pw@dblink CREATE tablename USING select-statement;
Pastikan untuk menggunakan SET LONG terlebih dahulu untuk meng-cover besar data (panjang data) di dalam LONG column dan menghindari pengosongan (truncate) data.
Kekurangannya adalah COPY command sudah dibekukan fungsinya pada Oracle versi 8. Fungsi ini hanya dapat meng-copy table tergantung datatype sebagai berikut : CHAR, DATE, LONG, NUMBER, and VARCHAR2. Beberapa datatype terbaru pada versi 8i dan berikutnya sudah tidak disupport.
Contoh berikut ini menunjukkan CREATE TABLE error dan successful COPY command.
SQL> CREATE TABLE my_views AS
2  SELECT * FROM user_views;
   SELECT * FROM user_views
          *
ERROR at line 2:
ORA-00997: illegal use of LONG datatype
SQL> SET LONG 100000
SQL> COPY FROM hr/hr@orcl CREATE my_views USING select * from user_views;
Array fetch/bind size is 15. (arraysize is 15)
Will commit when done. (copycommit is 0)
Maximum long size is 100000. (long is 100000)
Table MY_VIEWS created.
 1 rows selected from hr@orcl.
 1 rows inserted into MY_VIEWS.
 1 rows committed into MY_VIEWS at DEFAULT HOST connection.
SQL> descmy_views;
Name                        Null?          Type
----------------------  ------------- ----------------
VIEW_NAME                 NOT NULL      VARCHAR2(30)
TEXT_LENGTH                             NUMBER(38)
TEXT                                    LONG
TYPE_TEXT_LENGTH                        NUMBER(38)
TYPE_TEXT                               VARCHAR2(4000)
OID_TEXT_LENGTH                         NUMBER(38)
OID_TEXT                                VARCHAR2(4000)
VIEW_TYPE_OWNER                         VARCHAR2(30)
VIEW_TYPE                               VARCHAR2(30)
SUPERVIEW_NAME                          VARCHAR2(30)
Copy Long Datatype (Oracle) .... hmmm.....
Monday, August 6, 2007
Subscribe to:
Post Comments (Atom)


5 comments:
wuiihh...berat euy posting na.. bingung mo comment apa ya? :)
@osinaga : he he... gak seberat jadi konsultan PPAT ..hehehe
Bang Jali,
Saya mohon maaf sebelumnya tidak memperkenalkan diri. Saya Paulus seorang newbie di oracle, Ketika saya mengcopy sebuah tabel dari sebuah database ke database lain, mengapa datatypenya jadi berubah ya?
misal daru Number berubah jadi Number (38)....
Saya lakukan ini dengan copy command di sqlplus.
Terima kasih atas pencerahan yang akan Abang berikan...
Paulus Paska
pauluspaska@gmail.com
Bang Jali,
Saya mohon maaf sebelumnya tidak memperkenalkan diri. Saya Paulus seorang newbie di oracle, Ketika saya mengcopy sebuah tabel dari sebuah database ke database lain, mengapa datatypenya jadi berubah ya?
misal daru Number berubah jadi Number (38)....
Saya lakukan ini dengan copy command di sqlplus.
Terima kasih atas pencerahan yang akan Abang berikan...
Paulus Paska
pauluspaska@gmail.com
Halo Mas Paulus,
boleh tahu itu copy dari database apa ke database apa ? and boleh tahu command yang digunakan gak ? tks
Post a Comment