知识大全 Oracle8i 中生成创建对象的 SQL

Posted 信息

篇首语:犀渠玉剑良家子,白马金羁侠少年。本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 Oracle8i 中生成创建对象的 SQL相关的知识,希望对你有一定的参考价值。

Oracle8i 中生成创建对象的 SQL  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!

      包头定义      CREATE OR REPLACE PACKAGE srcmake AS    PROCEDURE maktab;    PROCEDURE makview;    PROCEDURE makseq;    PROCEDURE makcon(tabName VARCHAR );   END srcmake;   /         包体定义      CREATE OR REPLACE PACKAGE BODY srcmake AS       处理超过 个字符的行的输出      PROCEDURE dealline(initStr VARCHAR ) IS    lineCount INTEGER;    i INTEGER;   BEGIN    lineCount := ceil(length(initStr)/ );    FOR i IN lineCount LOOP     dbms_output put_line(substr(initStr + * (i ) ));    END LOOP;   END dealline;         生成创建表的SQL文件      PROCEDURE maktab IS    tempStr varchar ( );    countNum integer;    i integer;   BEGIN    dbms_output enable( E );      输出sql文件说明信息    dbms_output put_line( REM create table s sql );    dbms_output put_line( REM database user name: ||user);    dbms_output put_line( REM outputTime: ||sysdate);      查询用户的所有的表    FOR curtab IN(       SELECT a table_name table_name a tablespace_name ments ments       FROM user_tables A user_tab_ments b       WHERE a table_name = b table_name AND b table_type = TABLE       ORDER BY a table_name)    LOOP     输出表信息     dbms_output put_line(chr( )|| DROP TABLE ||curtab table_name|| ; );     dbms_output put_line( 表名 ||curtab table_name);     dbms_output put_line( 备注 ||ments);     dbms_output put_line( CREATE TABLE ||curtab table_name|| ( );       SELECT count(column_name) INTO countNum FROM user_tab_columns       WHERE table_name = curtab table_name;     i := ;       查询表所有的列     FOR curcol IN(       SELECT a * ments       FROM user_tab_columns a user_col_ments b       WHERE a table_name = curtab table_name AND a table_name = b table_name       AND lumn_name = lumn_name ORDER BY column_id)     LOOP      tempStr := chr( )||rpad(lumn_name )||curcol data_type;        以下类型需要指定长度      IF curcol data_type IN( VARCHAR CHAR VARCHAR RAW ) THEN       tempStr := tempStr|| ( ||curcol data_length|| ) ;        数字类型存在精度问题      ELSIF curcol data_type = NUMBER THEN       IF curcol data_precision IS NOT NULL THEN        tempStr := tempStr|| ( ||curcol data_precision;        IF curcol data_scale IS NOT NULL THEN         tempStr := tempStr|| ||curcol data_scale|| ) ;        ELSE         tempStr := tempStr|| ) ;        END IF;       ELSIF curcol data_scale = THEN         tempStr := tempStr|| ( ) ;       END IF;      END IF;      LONG LONG RAW CLOB NLOB BLOB ROWID类型不需指定长度        IF curcol nullable = N THEN     指定非空标志       tempStr := tempStr|| NOT NULL ;      END IF;      i := i + ;        最后一列不需逗号      IF i != countNum THEN       tempStr := tempStr|| ;      END IF;        输出列的信息      IF ments IS NOT NULL THEN       dbms_output put_line(rpad(tempStr )|| ||ments);      ELSE       dbms_output put_line(tempStr);      END IF;     END LOOP;       输出表空间信息     dbms_output put_line( ) TABLESPACE ||curtab tablespace_name|| ; );       输出表约束     makcon(curtab table_name);        END LOOP;    dbms_output put_line(chr( )||chr( ));   END maktab;         生成表的约束(primary key foreign key)    parameter:tabName表名称   PROCEDURE makcon(tabName VARCHAR ) IS    tempStr VARCHAR ( );    tempColStr VARCHAR ( );   BEGIN    FOR curcon IN(       SELECT owner constraint_name name constraint_type type       r_constraint_name rname delete_rule r_owner table_name       FROM user_constraints WHERE table_name = tabName AND constraint_type IN( P R U ))    LOOP     输出约束信息     tempStr := ALTER TABLE ||tabName|| ADD CONSTRAINTS ||curcon name;       FOR curcol IN(SELECT column_name FROM user_cons_columns       WHERE constraint_name = curcon name) LOOP      tempColStr := tempColStr||lumn_name|| ;     END LOOP;     tempColStr := substr(tempColStr length(tempColStr) );       输出约束的列信息     IF curcon type = P THEN 主键      tempStr := tempStr|| PRIMARY KEY( ||tempColStr|| ); ;     ELSIF curcon type = R THEN 外键      tempStr := tempStr|| FOREIGN KEY( ||tempColStr|| ) ||chr( );      tempStr := tempStr||   REFERENCES ||curcon r_owner|| ||curcon table_name|| ( ||tempColStr|| ) ;      tempStr := tempStr||curcon delete_rule|| ; ;     ELSIF curcon type = U THEN 唯一约束      tempStr := tempStr|| UNIQUE( ||tempColStr|| ); ;     END IF;     dbms_output put_line(tempStr);    END LOOP;   END makcon;         生成创建视图的SQL文件      PROCEDURE makview IS    i INTEGER;   BEGIN    dbms_output enable( E );    输出sql文件说明信息    dbms_output put_line(chr( )||chr( )|| REM create view s sql );    dbms_output put_line( REM database user name: ||user);    dbms_output put_line( REM outputTime: ||sysdate);      查询用户的所有的表    FOR curview IN(       SELECT a view_name a text ments ments       FROM user_views A user_tab_ments b       WHERE a view_name = b table_name AND b table_type = VIEW       ORDER BY a view_name)    LOOP     输出表信息     dbms_output put_line(chr( )|| DROP VIEW ||curview view_name|| ; );     dbms_output put_line( 视图名 ||curview view_name);     dbms_output put_line( 备注 ||ments);     dbms_output put_line( CREATE VIEW ||curview view_name|| AS );     dealline(curview text|| ; );    END LOOP;    dbms_output put_line(chr( )||chr( ));   END makview;         生成创建序列的SQL文件      PROCEDURE makseq IS    tempStr VARCHAR ( );   BEGIN    dbms_output enable( E );    输出sql文件说明信息    dbms_output put_line( REM create sequence s sql );    dbms_output put_line( REM database user name: ||user);    dbms_output put_line( REM outputTime: ||sysdate);      查询用户的所有的表    FOR curseq IN(select * from seq) LOOP     dbms_output put_line( DROP SEQUENCE ||curseq sequence_name|| ; );     tempStr := CREATE SEQUENCE ||curseq sequence_name;     IF curseq min_value IS NULL THEN      tempStr := tempStr|| NOMINVALUE ;     ELSE      tempStr := tempStr|| MINVALUE ||curseq min_value;     END IF;     IF curseq max_value IS NULL THEN      tempStr := tempStr|| NOMAXVALUE ;     ELSE      tempStr := tempStr|| MAXVALUE ||curseq max_value;     END IF;     tempStr := tempStr|| INCREMENT_BY ||curseq increment_by;     tempStr := tempStr|| STRART_WITH ||curseq last_number;     IF curseq cycle_flag = Y THEN      tempStr := tempStr|| CYCLE cha138/Article/program/Oracle/201311/18930

相关参考

知识大全 PL/SQL学习笔记(五)

PL/SQL学习笔记(五)  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  创建和管理表  对象 

知识大全 SQL入门:创建表

SQL入门:创建表  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  使用CREATETABLE语句

知识大全 SQL入门:创建视图

SQL入门:创建视图  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  如视图中所讨论的视图提供在一

知识大全 sql server2005设置自动备份全过程

  ()首先启动SQlServer代理(如果备份出现问题代理会通知管理员)  ()在服务器对象里面>新建备份设备  ()创建操作员当备份成功或者失败的时候通过网络通信通知管理员  ()在管理里面

知识大全 用sql语句动态的创建access表

   用sql语句动态的创建access表的代如下! <% nowtime=now()tablename=cstr(year(nowtime))

知识大全 sql server如何识别真实和自动创建的索引

  问我发现sysindexes索引表中的很多条目并不是我自己创建的听说它们并不是真正的索引而是SQLServer查询优化器自动创建的统计怎样才能识别哪些是真正的索引哪些是SQLServer自动创建的

知识大全 用SQL Mail创建日常报告

用SQLMail创建日常报告  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  大多数数据库开发小组

知识大全 使用 SQL Server创建语言辅助函数

使用SQLServer创建语言辅助函数  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  在现在这样

知识大全 用SQL Server事件探查器创建跟踪

用SQLServer事件探查器创建跟踪  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  SQLSe

知识大全 SQL工作流模板实例化向导创建SQLServer登录

SQL工作流模板实例化向导创建SQLServer登录  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!