动态网站制作指南 [  QQ表情  ]
[ 投票调查 ]
[ 企业邮箱 ]
[ 网站空间 ]
网络编程 | 站长之家 | 网页制作 | 图形图象 | 操作系统 | 冲浪宝典 | 软件教学 | 网络办公 | 邮件系统 | 网络安全 | 认证考试 | 系统进程
ASP源码 | .Net源码 | PHP源码 | JSP源码 | JAVA源码 | CGI源码 | VB源码 | C++源码 | Delphi源码 | PB源码 | VF源码 | 汇编 | 服务器
Firefox | IE | Maxthon | 迅雷 | 电驴 | BitComet | FlashGet | QQ | QQ空间 | Vista | 输入法 | Ghost | Word | Excel | wps | Powerpoint
asp | .net | php | jsp | Sql | c# | Ajax | xml | Dreamweaver | FrontPages | Javascript | css | photoshop | fireworks | Flash | Cad | Discuz!
当前位置 > 网站建设学院 > 网络编程 > 数据库 > Oracle教程
Tag:注入,存储过程,分页,安全,优化,xmlhttp,fso,jmail,application,session,防盗链,stream,无组件,组件,md5,乱码,缓存,加密,验证码,算法,cookies,ubb,正则表达式,水印,索引,日志,压缩,base64,url重写,上传,控件,Web.config,JDBC,函数,内存,PDF,迁移,结构,破解,编译,配置,进程,分词,IIS,Apache,Tomcat,phpmyadmin,Gzip,触发器,socket
数据库:数据库教程,数据库技巧,Oracle教程,MySQL教程,Sybase教程,Access教程,DB2教程,数据库安全,数据库文摘
文章搜索服务
邮件订阅
输入你的邮件地址,
你将不会错过任何关于:
[ Oracle教程 ]的信息

本月文章推荐
.使用dbv和RMAN检查数据文件中的坏.
.Oracle数据库的安全策略.
.Oracle 参数绑定性能实践.
.10g新特性之-expdp与传统exp的速.
.Oracle 数据库安全策略的具体分析.
.ExactPapers Oracle 1Z0-141 200.
.在Linux下安装Oracle.
.Oracle临时表 使用补充.
.FetchingAcrossCommits:WhereIst.
.关于Oracle存储过程测试.
.教你学会Script在Oracle中的应用.
.如何将Oracle数据库的普通表转换.
.oltp系统,数据块大小用4k还是8k.
.2Gb or Not 2Gb.
.Oracle 中巧用FORMS_DDL.
.创建镜像备用数据库.
.oracle中使用ANYDATA列对数据串行.
.Oracle9iAS——最完整的应用服务.
.Oracle 9i Real Application Clu.
.入门基础-Oracle常用脚本备忘.

Oracle8i 中生成创建对象的 SQL

发表日期:2008-2-9 |



  --
  -- 包头定义
  --
  CREATE OR REPLACE PACKAGE srcmake AS
   PROCEDURE maktab;
   PROCEDURE makview;
   PROCEDURE makseq;
   PROCEDURE makcon(tabName VARCHAR2);
  END srcmake;
  /
  
  --
  -- 包体定义
  --
  CREATE OR REPLACE PACKAGE BODY srcmake AS
  --
  -- 处理超过255个字符的行的输出
  --
  PROCEDURE dealline(initStr VARCHAR2) IS
   lineCount INTEGER;
   i INTEGER;
  BEGIN
   lineCount := ceil(length(initStr)/255);
   FOR i IN 1..lineCount LOOP
    dbms_output.put_line(substr(initStr,1 + 255 * (i - 1),255));
   END LOOP;
  END dealline;
  
  --
  -- 生成创建表的SQL文件
  --
  PROCEDURE maktab IS
   tempStr varchar2(4000);
   countNum integer;
   i integer;
  BEGIN
   dbms_output.enable(9E38);
  
   -- 输出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,b.comments comments
      FROM user_tables A,user_tab_comments b
      WHERE a.table_name = b.table_name AND b.table_type = 'TABLE'
      ORDER BY a.table_name)
   LOOP
    -- 输出表信息
    dbms_output.put_line(chr(10)'DROP TABLE 'curtab.table_name';');
    dbms_output.put_line('-- 表名:'curtab.table_name);
    dbms_output.put_line('-- 备注:'curtab.comments);
    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 := 0;
  
    -- 查询表所有的列
    FOR curcol IN(
      SELECT a.*,b.comments
      FROM user_tab_columns a,user_col_comments b
      WHERE a.table_name = curtab.table_name AND a.table_name = b.table_name
      AND a.column_name = b.column_name ORDER BY column_id)
    LOOP
     tempStr := chr(9)rpad(curcol.column_name,31,' ')curcol.data_type;
  
     -- 以下类型需要指定长度
     IF curcol.data_type IN('VARCHAR2','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 = 0 THEN
        tempStr := tempStr'(38)';
      END IF;
     END IF;
     -- LONG,LONG RAW,CLOB,NLOB,BLOB,ROWID类型不需指定长度
  
     IF curcol.nullable = 'N' THEN    -- 指定非空标志
      tempStr := tempStr' NOT NULL';
     END IF;
     i := i + 1;
  
     -- 最后一列不需逗号
     IF i !
= countNum THEN
      tempStr := tempStr',';
     END IF;
  
     -- 输出列的信息
     IF curcol.comments IS NOT NULL THEN
      dbms_output.put_line(rpad(tempStr,60,' ')'-- 'curcol.comments);
     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(10)chr(10));
  END maktab;
  
  --
  -- 生成表的约束(primary key,foreign key)
  -- parameter:tabName表名称
  PROCEDURE makcon(tabName VARCHAR2) IS
   tempStr VARCHAR2(4000);
   tempColStr VARCHAR2(2000);
  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 := tempColStrcurcol.column_name',';
    END LOOP;
    tempColStr := substr(tempColStr,0,length(tempColStr) - 1);
  
    -- 输出约束的列信息
    IF curcon.type = 'P' THEN -- 主键
     tempStr := tempStr' PRIMARY KEY('tempColStr');';
    ELSIF curcon.type = 'R' THEN -- 外键
     tempStr := tempStr' FOREIGN KEY('tempColStr') 'chr(10);
     tempStr := tempStr'  REFERENCES 'curcon.r_owner'.'curcon.table_name'('tempColStr') ';
     tempStr := tempStrcurcon.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(9E38);
   -- 输出sql文件说明信息
   dbms_output.put_line(chr(10)chr(10)'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,b.comments comments
      FROM user_views A,user_tab_comments b
      WHERE a.view_name = b.table_name AND b.table_type = 'VIEW'
      ORDER BY a.view_name)
   LOOP
    -- 输出表信息
    dbms_output.put_line(chr(10)'DROP VIEW 'curview.view_name';');
    dbms_output.put_line('-- 视图名:'curview.view_name);
    dbms_output.put_line('-- 备注:'curview.comments);
    dbms_output.put_line('CREATE VIEW 'curview.view_name' AS ');
    dealline(curview.text';
');
   END LOOP;
   dbms_output.put_line(chr(10)chr(10));
  END makview;
  
  --
  -- 生成创建序列的SQL文件
  --
  PROCEDURE makseq IS
   tempStr VARCHAR2(4000);
  BEGIN
   dbms_output.enable(9E38);
   -- 输出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
上一篇:为 PL/SQL 构建代码分析实用工具(三) 人气:427
下一篇:轻松取得 Oracle 结构描述句法 人气:521
浏览全部Oracle教程的内容 Dreamweaver插件下载 常用网页广告代码全集
  最新网站源码 最新软件下载
2008-9-4 LPLY CMS 网站管理系统 v5.0
2008-9-4 缤纷互动视频交友 v3.01.902
2008-9-4 ADN视频收藏专家 v3.0 bulid 080
2008-9-4 天空网络电影系统SKYUC v2.5.6 简
2008-9-4 Web Wiz Rich Text Editor(文本编
2008-9-4 幻影动漫网视频系统(Ppdong) v1.
2008-9-4 乐维电脑在线DIY配置系统
2008-9-4 老樊文章管理系统SQL版
2008-9-4 ASP.NET 2.53 缩略图水印组件源码
2008-8-23 Mini WinMount V0.4
2008-8-23 Vista优化大师3.11正式版
2008-8-23 Wine 1.13
2008-8-23 KlipFolio 5.0 Build 5899-80
2008-8-23 Windows Sysinternals Desktops
2008-8-23 OneTap Movies1.2破解版
2008-8-23 AnnotaterPDF阅读1.1.503 破解版
2008-8-23 SoundMeter分贝测量仪 v1.0汉化破
2008-8-23 iDrum音乐节拍1.0破解版
  发表评论
姓 名: 验证码:
内 容:
站长工具:网站收录查询 | Google PR查询 | ALEXA排名查询 | CSS在线编辑器 | 广告代码 | Html转换js | js/vbs加密 | md5加密 | 进制转换
实用工具:汉字翻译拼音 | 符号对照表 | 个税计算 | 经典小工具 | 汉字简繁转换 | 普通单位换算 | 公制单位换算 | 生辰老黄历 | 国内电话区号 国家代码与域名缩写 | 文字加密解密 | 健康查询 | 万年历 | 汉字横竖排版 | 手机号码查询 | 计算器 | ip搜索
业务联系 | 广告刊登 | 频道合作 | 投稿荐稿 | 联系方式 | 加入收藏 | RSS订阅
Copyright © 2000-2008 www.knowsky.com All rights reserved | 网络实名:动态网站制作指南 | 沪ICP备05001343号
ホームページ制作 不動産検索システム 求人情報
防水工事·改修工事 フットサル大会 探偵