今天遇到乙個問題:要求在可重複執行的sql指令碼新增一段sql**:修改當前的資料型別。因為sql**放在重複執行的指令碼中,那須考慮到資料型別滿足條件時則不進行修改。一時不知道怎麼解決。然後就搜尋出上面鏈結的博文。最後解決了。
--如果當前字段不是varchar2(64)型別的則執行prompt modify columns_name for temp.your_table_name ......
declare
v_rowcount integer;
begin
select count(*) into v_rowcount from dual where exists(
select t.* from user_tab_columns t
where table_name = upper('your_table_name')
and t.column_name = upper('columns_name')
and t.data_type = 'varchar2'
and t.data_length < 64);
if v_rowcount = 1 then
execute immediate 'alter table temp.your_table_name modify columns_name varchar2(64) default '' ''';
end if;
end;
/
一、sqlplus中,直接用 desc[ribe] tablename 即可。
二、在外部應用程式呼叫檢視oracle中的表結構時,只能用下面的語句代替:
1、看欄位名與資料型別
select * from colswhere table_name=upper('table_name');
--(user_tab_columns縮寫cols)
2、檢視全部列
select * from user_tab_columnswhere table_name = upper(『tablename』);
3、檢視某些列
select column_name,data_type,data_length,data_precision ,data_scalefrom all_tab_columns
where table_name=upper('tablename');
4、檢視指定列的資料型別
select data_typefrom user_tab_columns t
where t.column_name=upper('fielda列名')
and t.table_name =upper(trim('test2表名'));
5、通過user_constraints檢視所有約束
select * from user_constraints where table_name = upper('tablename');
6、檢視主鍵約束:
select * from user_constraints where constraint_type='p' and table_name=upper('table_name');
Oracle應用之修改表字段型別
mysql對於有資料和沒資料的表字段型別都可以隨意修改,不過oracle就不一樣。假如表a有個字段a,本來為number型別,然後我們想修改為varchar2型別。1 欄位a沒資料的情況,改為varchar2 10 可以如下 alter table a modify a varchar2 10 2 ...
Oracle修改表字段以及表型別
win7 oracle pl sql 一張表 lyz emp 建立表lyz emp create table lyz emp e id number 10 not null e oldname varchar2 2 not null primary key e id 測試表lyz emp是否建立成功...
Oracle操作表,字段
0.建立表 create table table name as select from table name b 1.oracle 修改表名 alter table old table name rename to new table name 大寫為系統命令 2.oracle通過altertab...