Anda boleh menggunakan skrip untuk menukar semua medan jenis CHAR kepada jenis VARCHAR2 dan memotong ruang dalam rentetan, seperti berikut:
isytiharkan
mulakan
untuk c in (pilih *
daripada pengguna_tab_columns t1
di mana t1.DATA_TYPE = 'CHAR'
) gelung
laksanakan segera 'ubah jadual' ||. c.nama_jadual ||
jalankan 'kemas kini ' ||. c.nama_jadual ||laksanakan 'kemas kini ' ||. c.table_name ||. c.column_name ||
laksanakan segera 'ubah jadual ' ||. nama_jadual || ' ubah suai ' ||. c.column_name ||laksanakan 'kemas kini ' ||. c.nama_jadual ||. ' set ' ||
laksanakan segera 'ubah jadual' ||. c.nama_jadual ||. c.nama_jadual ||gelung hujung;
akhir;
Cara mengalih keluar aksara seperti ruang dalam struktur jadual pangkalan data Oracle
1 Mula-mula keluarkan ruang sebelum perbandingan (contohnya, keluarkan semua ruang dalam nama):
Kemas kini set nama_jadual xm=replace(xm, ' ') ;
Lepas tu boleh bandingkan.
2 Walau bagaimanapun, kami mungkin mendapati bahawa terdapat aksara yang serupa dengan ruang di tengah atau di hujung beberapa nama yang belum dialih keluar, tetapi mereka jelas bukan ruang biasa, jadi kami mengesyaki Tab Jian yang bersalah. Jadi saya mengikuti kaedah mengalih keluar kunci TAB yang disebut di Internet dan menggunakan chr(9) untuk menggantikan bar ruang (nilai ASCII bagi kunci TAB ialah 9). Mula-mula ambil rekod dengan aksara seperti ruang untuk percubaan:
PILIH ganti(xm, chr(9) ) daripada table_name di mana;
Menggunakan kaedah ini akan mengalih keluar beberapa ruang kekunci tab sebenar, dan kemudian menggunakan kaedah kemas kini kelompok.
3 Tetapi situasi yang saya hadapi tidak begitu bernasib baik dan saya gagal mengeluarkan kunci seperti ruang. Apa yang perlu dilakukan? Saya memutuskan untuk cuba mendapatkan nilai kod ASCII bagi kunci ruang ini dahulu, dan kemudian gunakan kaedah chr (nilai kod ASCII) untuk memprosesnya.
① Dapatkan panjang () keseluruhan rentetan yang mengandungi kekunci seperti ruang, dengan itu menentukan kedudukan permulaan kekunci seperti ruang dalam rentetan dan panjang kekunci seperti ruang.
② Nilai kod ASCII bagi kekunci seperti ruang: ascii(substr(xm,n,m));
③.PILIH ganti(xm, chr (nilai kod ASCII diperolehi dalam langkah ②)) daripada nama_jadual di mana;
Selesai masalah. Tetapi saya mendapati bahawa nilai kod ASCII yang diperoleh dalam langkah 2 di atas ialah 41377. Ini sepatutnya nilai kod ASCII bagi aksara Cina, dan ia kelihatan seperti ruang Jadi saya tertanya-tanya, bolehkah ia menjadi kunci ruang dan kunci TAB dalam bahasa Cina mod? Selepas mencuba saya mendapati ia tidak. Saya juga tertanya-tanya, adakah ia perbezaan antara lebar penuh dan separuh lebar? Kerana kami biasanya memasukkan aksara pada separuh lebar. Saya mengikuti langkah pertama "1. Mula-mula keluarkan ruang sebelum membandingkan ..." dan cuba memasukkan ruang dalam keadaan lebar penuh dan carian hasilnya adalah mengejutkan adalah ruang yang dimasukkan dalam keadaan lebar penuh Sambungan selari mengesahkan bahawa nilai kod ASCII ruang yang dimasukkan dalam mod lebar penuh ialah 41377.
Atas ialah kandungan terperinci Apakah penyelesaian kepada masalah ruang dalam data jenis CHAR dalam Oracle?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!