如何编程得到指定数据库中所有表的建表语句,类似
create table smzhcn (
    id       number            not null,
    stde     varchar2(4)        not null, 
    tmpe     varchar2(4)        not null,
    primary key(id)
);
这样的语句

解决方案 »

  1.   

    select table_name from dba_tables;
      

  2.   


     select dbms_metadata.get_ddl('TABLE','TABLENAME','USERNAME') from dual;
      

  3.   

    表定义
    select dbms_metadate.get_ddl('TABLE','TABLENAME','USERNAME') from dual;
    视图定义:
    select dbms_metadate.get_ddl('VIEW','VIEWNAME','USERNAME') from dual;
    动态视图,v$session之类的:
    select * from v$fixed_view_definition where table_name = upper('gv$..');
      

  4.   

    你在sql server那边也问了,如果是SQL SERVER,则参考如下:
    --允许配置高级选项
    EXEC sp_configure 'show advanced options', 1
    GO
    -- 重新配置
    RECONFIGURE WITH OVERRIDE
    GO
    -- 启用xp_cmdshell
    EXEC sp_configure 'Ole Automation Procedures', 1
    GO
    --重新配置
    RECONFIGURE WITH OVERRIDE
    GO
    if exists(select 1 from sysobjects where id=object_id('fgetscript') and objectproperty(id,'IsInlineFunction')=0) 
    drop function fgetscript 
    go create function fgetscript( 
    @servername varchar(50)    --服务器名 
    ,@userid varchar(50)='sa'    --用户名,如果为nt验证方式,则为空 
    ,@password varchar(50)=''    --密码 
    ,@databasename varchar(50)    --数据库名称 
    ,@objectname varchar(250)    --对象名 ) returns varchar(8000) 
    as 
    begin 
    declare @re varchar(8000)        --返回脚本 
    declare @srvid int,@dbsid int      --定义服务器、数据库集id 
    declare @dbid int,@tbid int        --数据库、表id 
    declare @err int,@src varchar(255), @desc varchar(255) --错误处理变量 --创建sqldmo对象 
    exec @err=sp_oacreate 'sqldmo.sqlserver',@srvid output 
    if @err <>0 goto lberr --连接服务器 
    if isnull(@userid,'')='' --如果是 Nt验证方式 
    begin 
      exec @err=sp_oasetproperty @srvid,'loginsecure',1 
      if @err <>0 goto lberr   exec @err=sp_oamethod @srvid,'connect',null,@servername 
    end 
    else 
      exec @err=sp_oamethod @srvid,'connect',null,@servername,@userid,@password if @err <>0 goto lberr --获取数据库集 
    exec @err=sp_oagetproperty @srvid,'databases',@dbsid output 
    if @err <>0 goto lberr --获取要取得脚本的数据库id 
    exec @err=sp_oamethod @dbsid,'item',@dbid output,@databasename 
    if @err <>0 goto lberr --获取要取得脚本的对象id 
    exec @err=sp_oamethod @dbid,'getobjectbyname',@tbid output,@objectname 
    if @err <>0 goto lberr --取得脚本 
    exec @err=sp_oamethod @tbid,'script',@re output 
    if @err <>0 goto lberr --print @re 
    return(@re) 
    lberr: 
    exec sp_oageterrorinfo NULL, @src out, @desc out 
    declare @errb varbinary(4) 
    set @errb=cast(@err as varbinary(4)) 
    --exec master..xp_varbintohexstr  @errb,@re out 
    set @re=--'错误号: '+@re 
       char(13)+'错误源: '+@src 
      +char(13)+'错误描述: '+@desc 
    return(@re) 
    end 
    go -------------------------------declare @name varchar(250) 
    declare #aa cursor for 
    select name from sys.tables  
    open #aa 
    fetch next from #aa into @name 
    while @@fetch_status=0 
    begin 
    print dbo.fgetscript(''/*servername*/,''/*userid*/,''/*password*/,''/*databasename*/,@name) 
    fetch next from #aa into @name 
    end 
    close #aa 
    deallocate #aa 
      

  5.   

    select dbms_metadata.get_ddl('TABLE','TBNAME','USER') FROM DUAL
      

  6.   

    这个只能支持sql 2005以上吧,2000貌似不行