【问题标题】:Perl DBI: store the ddl of a column in a variablePerl DBI:将列的ddl存储在变量中
【发布时间】:2015-07-20 15:34:38
【问题描述】:

在 Perl DBI 中,我可以将列的 ddl 存储在变量中吗?我的目标是使用列的定义在另一个数据库中创建一个临时表。

迈克

【问题讨论】:

    标签: perl db2 dbi


    【解决方案1】:

    大多数数据库都有关于表信息或元数据的表。看起来您正在使用 DB2,所以这里是一个示例 Description of columns in a DB2 table

    您还可以将表的一部分复制到临时表中。

    【讨论】:

    • 嗨,Kim,事实上我在 dbi 中使用 db2 驱动程序。那么,如果我在数据库 A 上的 perl DBI 中创建一个临时表,如何提取临时表定义以在数据库 B 上创建相同的临时表?
    • 只需使用 SQL 的“create table as”语法,就可以使用相同的数据定义重新制作。我认为这对 DB2 来说应该没问题: CREATE TABLE SCHEMA.NEW_TB AS (SELECT * FROM SCHEMA.OLD_TB) WITH NO DATA
    • 2 个不同的数据库位于 2 个不同的服务器上。数据库 A 上的临时表定义在数据库 B 上是不可见的。所以,我需要使用 Perl 来存储定义并重用它。
    • 也许将表定义导出为 SQL CREATE TABLE 语句。然后在数据库 B 上运行此语句以制作您的临时表。
    【解决方案2】:

    简单的方法是获取表的描述,然后解析它可能会产生所需列的ddl。

    考虑到,表的描述存储在文件'table.txt'中,

    $cat table.txt
     Name                                     Null?    Type
     -------------------------------------- -------- ----------------------------
     COLUMN1                                NOT NULL DATE
     COLUMN2                                NOT NULL VARCHAR2(31)
     COLUMN3                                NOT NULL VARCHAR2(1)
     COLUMN4                                NOT NULL NUMBER
    
    
    
    #!/usr/bin/perl
    open (FILE, 'table.txt');
    while (my $line = <FILE>)
    {
      chomp($line);
      $line =~ s/\s\s+/,/g;
      $line =~ s/NULL /NULL,/gi;
      my ($column,$null_field,$type) = split /,/, $line, 3;
      print "$column $type $null_field,\n";
    }
    close (FILE);
    

    P.S:'table.txt'的前两行需要忽略,因为它们构成了标题信息。

    【讨论】:

      猜你喜欢
      • 2011-03-04
      • 2019-02-01
      • 1970-01-01
      • 2014-05-23
      • 2011-07-23
      • 2021-02-13
      • 2015-08-12
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多