oracle 自動建表
目前由於做一個專案,由客戶自己定義表名、表字段、欄位是否允許為空等等,所以寫了一下程式碼:
tab_object表主要用於儲存表名、表空間等。
-- Create table
create table TAB_OBJECT
(
ID VARCHAR2(40) not null,
TAB_NAME VARCHAR2(100) not null,
TAB_CNAME VARCHAR2(100),
TAB_SPACE VARCHAR2(100) not null,
CREATED DATE not null,
CREATED_USER VARCHAR2(50) not null,
LAST_DDL_TIME DATE,
LAST_DDL_USER VARCHAR2(50),
STATUS NUMBER(1)
)
tablespace JZSOFT
pctfree 10
pctused 40
initrans 1
maxtrans 255
storage
(
initial 64K
minextents 1
maxextents unlimited
);
-- Add comments to the columns
comment on column TAB_OBJECT.TAB_NAME
is '表名';
comment on column TAB_OBJECT.TAB_CNAME
is '表中文名';
comment on column TAB_OBJECT.TAB_SPACE
is '表空間';
comment on column TAB_OBJECT.CREATED
is '建立日期';
comment on column TAB_OBJECT.CREATED_USER
is '建立人';
comment on column TAB_OBJECT.LAST_DDL_TIME
is '最後修改日期';
comment on column TAB_OBJECT.LAST_DDL_USER
is '最後修改人';
comment on column TAB_OBJECT.STATUS
is '狀態';
-- Create/Recreate primary, unique and foreign key constraints
alter table TAB_OBJECT
add constraint PK_TAB_OBJECT primary key (ID)
using index
tablespace JZSOFT
pctfree 10
initrans 2
maxtrans 255
storage
(
initial 64K
minextents 1
maxextents unlimited
);
-- Create/Recreate indexes
create unique index INX_TABNAME on TAB_OBJECT (TAB_NAME)
tablespace JZSOFT
pctfree 10
initrans 2
maxtrans 255
storage
(
initial 64K
minextents 1
maxextents unlimited
);
表tab_column 主要儲存表的欄位、資料型別、型別長度、是否為空、是否主鍵等資訊。這裡並沒有對外來鍵進行管理,
-- Create table
create table TAB_COLUMN
(
TAB_NAME VARCHAR2(100) not null,
ID VARCHAR2(40) not null,
COLUMN_NAME VARCHAR2(100) not null,
COLUMN_CNAME VARCHAR2(100),
DATA_TYPE VARCHAR2(100) not null,
DATA_LENGTH NUMBER(10),
CREATED DATE,
ISNULL NUMBER(1),
COLUMN_DEFAULT VARCHAR2(500),
ISPK NUMBER(1)
)
tablespace JZSOFT
pctfree 10
pctused 40
initrans 1
maxtrans 255
storage
(
initial 64K
minextents 1
maxextents unlimited
);
-- Add comments to the table
comment on table TAB_COLUMN
is '表字段+描述';
-- Add comments to the columns
comment on column TAB_COLUMN.TAB_NAME
is '表名';
comment on column TAB_COLUMN.COLUMN_NAME
is '欄位名';
comment on column TAB_COLUMN.COLUMN_CNAME
is '欄位中文名';
comment on column TAB_COLUMN.DATA_TYPE
is '資料型別';
comment on column TAB_COLUMN.DATA_LENGTH
is '欄位長度';
comment on column TAB_COLUMN.CREATED
is '建立時間';
comment on column TAB_COLUMN.ISNULL
is '是否為空';
comment on column TAB_COLUMN.COLUMN_DEFAULT
is '預設值';
comment on column TAB_COLUMN.ISPK
is '是否為主鍵';
-- Create/Recreate primary, unique and foreign key constraints
alter table TAB_COLUMN
add constraint PK_TAB_COLUMN primary key (ID)
using index
tablespace JZSOFT
pctfree 10
initrans 2
maxtrans 255
storage
(
initial 64K
minextents 1
maxextents unlimited
);
alter table TAB_COLUMN
add constraint FK_TABNAME foreign key (TAB_NAME)
references TAB_OBJECT (ID) on delete cascade;
-- Create table
表:CREATETABLE_LOG為日誌表、儲存建表時的錯誤資訊,資訊記錄太少,需要加強日誌記錄。
create table CREATETABLE_LOG
(
TABLE_NAME VARCHAR2(100),
C_SQLCODE VARCHAR2(500),
BEIZHU VARCHAR2(1000)
)
tablespace JZSOFT
pctfree 10
pctused 40
initrans 1
maxtrans 255
storage
(
initial 64K
minextents 1
maxextents unlimited
);
實現儲存過程:
create or replace procedure sp_createtable( l_tabname varchar2 )
is
ls_create varchar2(4000);
ls_tablespace varchar2( 4000 );
--ls_alter varchar2(4000);
ls_type varchar2( 1000 );
ls_default varchar2( 4000 );
ls_isnull varchar2( 30 );
ls_ispk varchar2( 500 );
ls_comment_column varchar2(4000);
ls_comment_tab varchar2(500);
ls_sqlcode varchar2(500);
ls_errm varchar2(500);
TYPE red_cfgdb IS RECORD (
comment_column varchar2(4000),inx_column varchar2(500));
li_i integer;
TYPE type_conarray IS TABLE OF red_cfgdb INDEX BY PLS_INTEGER;
gv_conarray type_conarray;
begin
ls_create := null ;
ls_tablespace := null;
li_i:=1;
--ls_alter := null;
for a in ( select x.id,x.tab_name,x.tab_cname,x.tab_space,y.column_name,y.column_cname,y.data_type,y.data_length,y.isnull,y.column_default,y.ispk
from tab_object x,tab_column y where x.id=y.tab_name and upper(x.id) = upper(l_tabname) ) loop
ls_type := case when upper(a.data_type) = upper('date') then a.data_type
when upper(a.data_type) <> upper('date') and a.data_length is null then a.data_type
when upper(a.data_type) <> upper('date') and a.data_length is not null then a.data_type||'('||a.data_length||')'
end ;
ls_isnull := case when a.isnull = 1 then ' not null ' else null end;
ls_ispk := case when a.ispk = 1 And ls_ispk is null then ' constraint PK_'||l_tabname||' primary key ('||a.column_name
when a.ispk = 1 and ls_ispk is not null then ls_ispk||', '||a.column_name
else ls_ispk
end ;
ls_tablespace := case when ls_tablespace is null then 'tablespace '|| a.tab_space || ' pctfree 10 pctused 40 initrans 1
maxtrans 255 storage ( initial 64K minextents 1 maxextents unlimited )' end ;
ls_default := case when a.column_default is not null then ' default '||a.column_default end ;
if ls_create is null then
ls_create := ' create table '||a.tab_name||' ( '
||chr(10)||a.column_name||chr( 32 ) ||ls_type|| chr(32)||ls_default||chr( 32 )||ls_isnull ;
else
ls_create := ls_create||chr(10)||' , '||a.column_name||chr( 32 ) ||ls_type|| chr(32)||ls_default||chr( 32 )||ls_isnull ;
end if;
ls_comment_tab := case when a.tab_cname is not null and ls_comment_tab is null then ' comment on table '||l_tabname ||' is ' ||chr(39)||a.tab_cname||chr(39) else ls_comment_tab end ;
gv_conarray(li_i).comment_column := ' comment on column '||l_tabname||'.'||a.column_name||' is '||chr(39)||a.column_cname ||chr(39) ;
li_i:=li_i+1;
end loop;
ls_create := ls_create||chr( 32 )
||chr(10)||case when ls_ispk is not null then ' , '||ls_ispk||')' end
||chr(10)||' ) '
||chr(10)||ls_tablespace ;
execute immediate ls_create ;
insert into createtable_log(table_name,c_sqlcode,beizhu) values( l_tabname,'','建表成功!' );
execute immediate ls_comment_tab ;
li_i := gv_conarray.first;
WHILE li_i is NOT NULL LOOP
execute immediate gv_conarray(li_i).comment_column;
li_i := gv_conarray.next(li_i);
END LOOP;
exception when others then
ls_sqlcode := sqlcode;
ls_errm:=sqlerrm;
insert into createtable_log(table_name,c_sqlcode,beizhu) values( l_tabname,ls_sqlcode,ls_errm );
dbms_output.put_line( ls_sqlcode ) ;
commit;
end sp_createtable;
ps:在開始除錯儲存過程的時候,在 execute immediate 時 經常報“ORA-00911 無效字元”錯誤,無論怎麼搞都找不到原因,我把語句copy到plsql中執行通過。 後來找了很久才發現 在execute immediate中 不能執行多行語句和不允許有分號.
相關推薦
oracle 自動建表
目前由於做一個專案,由客戶自己定義表名、表字段、欄位是否允許為空等等,所以寫了一下程式碼: tab_object表主要用於儲存表名、表空間等。 -- Create tablecreate table TAB_OBJECT( ID VARC
IDEA建立springboot+hibernate+oracle自動建表遇到的問題
按照貫通的搭建模式 maven空專案+子模組,發現配置好 oracle ,jpa依賴,yml檔案 配置好,實體類建好 ,自動建表失敗 後來發現原因 springboot載入時 是 預設當前路徑 或者上一級路徑下 , 而springboot 專案是三維定位 ,
Activiti+oracle 啟動專案時不能自動建表或更新表的問題分析及解決辦法
現象描述:按照正常配置,第一次啟動時不能自動建表 關鍵配置片段如下: <bean id="processEngineConfiguration" class="org.activiti.spring.SpringProcessEngineConfiguratio
oracle創建表案列
oracl png blog ima src img 9.png 技術分享 acl 下面是以商品交易為案列 做的關於用戶、庫存、商品、交易的表格 oracle創建表案列
Oracle創建表空間、創建用戶以及授權
指定表 count conf fault 除了 max limited 初學 ati Oracle安裝完後,其中有一個缺省的數據庫,除了這個缺省的數據庫外,我們還可以創建自己的數據庫。 對於初學者來說,為了避免麻煩,可以用‘Database Configuratio
oracle 創建表
time tab sele wid url eight 跟蹤 from select --創建表create table browser_track( btId number not null , opend_id varchar2(50) not null, url
Oracle創建表空間及用戶
blog -m html rod str ffffff 創建 manage spl 一、創建表空間 1、設置實例名 echo $ORACLE_SID export ORACLE_SID=mvbpbang 2、sqlplus登錄/sqlplus命令登錄
Hiberntate不能自動建表的問題:hibernate.(*)
寫代碼 dial ddl ber pro nta auto OS div 今天寫代碼的時候發現啟動服務器之後不能自動建表了?wtf什麽鬼?最後發現了這個問題: hbm2ddl.auto前的hibernate.省略之後出的問題,可能是bug之後的版本應該會修復 <pro
oracle創建表空間
oracle創建表空間參數詳解 語法描述: CREATE?[UNDO]? TABLESPACE tablespace_name [DATAFILE datefile_spec1 [,datefile_spec2] ...... [ { MININUM?EXTENT integer [k|m] | BLOCK
第三次 orm自動建表及遇到的問題
tag ket evaluate jdbc rect clip bstr extra .com Hibernate支持自動建表,在開發階段很方便,可以保證hbm與數據庫表結構的自動同步。 方法很簡單,在hibernate.cfg.xml內加入 <property na
hibernate不能自動建表:MySQLSyntaxErrorException: Table '' doesn't exist
mysql mysql5 nat nta exist ble property cep exception 修改前: <property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect<
oracle 創建表空間及oracle 11g表空間之最大最小
rop create default 數據文件 32位系統 conn dbf ide 剩余空間 /*分為四步 *//*第1步:創建臨時表空間 */create temporary tablespace emaoyi_temp tempfile ‘D:\app\Adminis
配置資料庫方言為MySQLInnoDBDialect之後不能自動建表
配置了資料庫方言為MySQLInnoDBDialect之後不能自動建表 dev環境配置為MySQLInnoDBDialect,程式釋出到dev環境沒問題。dev的庫為mariadb5.5.33a。 後來dev資料庫遷移,順便把資料庫版本升級到了mariadb10.0,發
springdata jpa自動建表
application.properties檔案內容為: spring.datasource.driverClassName=com.mysql.cj.jdbc.Driver spring.datasource.url=jdbc:mysql://localhost:3306/demo?characte
hibernate通過pojo自動建表操作
1. 多對一 如球員和球隊的關係:多個球員在同一個球隊中。 1.1 類圖 TeamPojo:屬性 + set/get public class TeamPojo{ private Integer teamId; private String teamName; private String team
Oracle資料庫建表前,先判斷是否表存在,存在不建表,不存在則建表
------建立TABNAME ---------- DECLARE TOTAL INT := 0; BEGIN SELECT COUNT(1) INTO TOTAL FROM USER_TABLES A
Oracle常用建表語句
欄位型別: 名稱:SERIES_NAME VARCHAR2(200) 數字:ONWAY NUMBER 標識:FLAG NUMBER(1) 日期:DATE_DAY VARCHAR2(20) create table CUSTOMER_COUNT ( UPDATE_DATE DATE
hibernate關閉自動建表
表結構和資料總是在程式執行的時候無端的修改,折騰了好長時間,查了很長時間hibernate的資料庫對映檔案和介面程式,始終沒有發現有什麼錯誤,到最後才發現了它! <prop
出現 Unable to instantiate default tuplizer,hibernate自動建表失敗,原因是在實體類中聲明瞭成員變數describe,而describe是mysql關鍵字
歡迎使用Markdown編輯器寫部落格 本Markdown編輯器使用StackEdit修改而來,用它寫部落格,將會帶來全新的體驗哦: Markdown和擴充套件Markdown簡潔的語法 程式碼塊高亮 圖片連結和圖片上傳 LaTex數學公式 UML序列圖和
springBoot使用jpa不自動建表問題
目錄結構 實體類: package test; import javax.persistence.Entity; import javax.persistence.GeneratedValue; import javax.persistence.Id;