主页 > oracle, perl > DBI获取oracle建表语句【原创】

DBI获取oracle建表语句【原创】

2013年3月28日 发表评论 查看评论

今天明月在chinaunix论坛看到有人问用perl的DBI如何获取oracle的建表语句,直接用desc不能成功。想起几年前明月有个代码也遇到过这个问题,就总结如下:

第一种方法:

#数据库数据类型对应关系
my %sql_type = (
1 => 'SQL_CHAR' ,
2 =>  'SQL_NUMERIC' ,
3 =>  'SQL_DECIMAL' ,
4 =>  'SQL_INTEGER' ,
5 =>  'SQL_SMALLINT' ,
6 =>  'SQL_FLOAT' ,
7 =>  'SQL_REAL' ,
8 =>  'SQL_DOUBLE' ,
9 =>  'SQL_DATE' ,
10=>  'SQL_TIME' ,
11=>  'SQL_TIMESTAMP' ,
12=>  'SQL_VARCHAR' ,
-1=>  'SQL_LONGVARCHAR' ,
-2=>  'SQL_BINARY' ,
-3=>  'SQL_VARBINARY' ,
-4=>  'SQL_LONGVARBINARY',
-5=> 'SQL_BIGINT' ,
-6=> 'SQL_TINYINT' ,
-7=> 'SQL_BIT' ,
-8=> 'SQL_WCHAR' ,
-9=> 'SQL_WVARCHAR' ,
-10=> 'SQL_WLONGVARCHAR'
);
my $sth = $dbh->prepare( "SELECT * FROM tablename");
$sth->execute();
my $fields = $sth->{NUM_OF_FIELDS};
for ( my $i = 0 ; $i < $fields ; $i++ ) {
my $name = $sth->{NAME}->[$i];
my $type =  $sth->{TYPE}->[$i] ;
my $prec = $sth->{PRECISION}->[$i];
my $nullable = ("Not Null", "Null", "Unknown")[ $sth->{NULLABLE}->[$i] ];
print FILE1 sprintf "%-30s %-20s %4d %s\n",$name,$sql_type{$type} ,$prec,$nullable; #2010-3-29
}
$sth->finish();

第二种方法,直接获取建表语句分析文本:

$dbh->{LongReadLen} = 10000;
my $sth = $dbh->prepare( "SELECT DBMS_METADATA.GET_DDL('TABLE','${table_name}','${owner_name}') FROM DUAL");
$sth->execute();
my $row = $sth->fetchrow_array ;
#按自己要求做文本分析。。
$row =~ s/(–.*|"|")//g;  #去注释
$row =~ s/PRIMARY KEY[\d\D]*//; #primary后面的都不要
print $row; 

原创文章,转载请注明: 转载自肚腩照明月'blog

本文链接地址: DBI获取oracle建表语句【原创】

文章的脚注信息由WordPress的wp-posturl插件自动生成


  1. 本文目前尚无任何评论.

SEO Powered by Platinum SEO from Techblissonline