Hatena::ブログ(Diary)

マイノート

2015-04-26

クラビーア

https://kotobank.jp/word/クラビーア-485663#E3.83.87.E3.82.B8.E3.82.BF.E3.83.AB.E5.A4.A7.E8.BE.9E.E6.B3.89

平均律

Equal temperament

wikipedia:平均律

平均律(へいきんりつ)とは、1オクターヴなどの音程を均等な周波数比で分割した音律である。一般には12平均律のことを指すことが多い。

2015-04-21

2015-04-15

2015-04-14

素振り派

http://www.sponichi.co.jp/baseball/news/2015/04/14/kiji/K20150414010164800.html

久しぶりに5分くらい素振りしたら上半身筋肉痛になりました。。

2015-04-05

1915年

http://en.wikipedia.org/wiki/1915

January 25

First United States coast-to-coast long-distance telephone call, facilitated by a newly invented vacuum tube amplifier, ceremonially inaugurated by Alexander Graham Bell in New York City and his former assistant Thomas A. Watson, in San Francisco, California.

Oracleのテーブル定義をExcelシートに出力する(3)

#!/usr/bin/env perl

use XML::Simple;
use Tie::IxHash;
use Spreadsheet::WriteExcel;

*XML::Simple::new_hashref = 'new_hashref';
sub new_hashref {
  my $self = shift;
  tie my %hash, 'Tie::IxHash';
  %hash = @_;
  return \%hash;
}

if($ARGV[0] eq ""){
  die "usage: table_info_xml2xls.pl <filename.xls>"
}

$workbook = Spreadsheet::WriteExcel->new($ARGV[0]);

tie(%VAR, 'Tie::IxHash');
$VAR = XML::Simple->new()->XMLin('-');

foreach $table (keys %{$VAR->{table}}){
  $worksheet = $workbook->add_worksheet($table);
  $format = $workbook->add_format();
  $i = 0;
  foreach $row (@{$VAR->{table}->{$table}->{row}}){
    $j = 0;
    foreach $column (keys %{$row->{column}}){
      $worksheet->write_string($i, $j, $row->{column}->{$column}->{content}, $format);
      #print $row->{column}->{$column}->{content},"\n";
      $j++;
    }
    $i++;
  }
}

$workbook->close();

参照したページ

XML::Simple で RSS の entry を順番通りに取り出す方法

http://blog.dealforest.net/2009/09/xml-parse-in-order/

help to preserve the order of hash

http://www.perlmonks.org/?node_id=846121

知ってそうで意外と知られていないperlの小技 10選

http://d.hatena.ne.jp/download_takeshi/20100610/1276178221


$ ./ora_table_info.pl hr/hr@bros:1521/xe HR | ./table_info_xml2xls.pl table_info2.xls

実行結果

table_info2.xls 直

2015-03-28

Oracleのテーブル定義をExcelシートに出力する(2)


http://d.hatena.ne.jp/tigerii/20120730/1343660136

で作ったプログラムを見直す。


前回は ./show_user_tables.pl HR でHRが所有するテーブルを一行ずつ出力し、./table_info2.xls.pl ではテーブル毎にテーブル定義をselectして、出力結果をexcelファイルに書き込んだ。

$ ./show_user_tables.pl HR | ./table_info2xls.pl


今回は、DB接続情報とownerを渡して、xml形式で出力する。

(ora_table_info.pl)

#!/usr/bin/env perl

use DBI;

$ENV{ORACLE_HOME}='/u01/app/oracle/product/11.2.0/xe';
$driver = 'Oracle';

if( $ARGV[0] =~ /(\S+)\/(\S+)\@(\S+):(\d+)\/(\S+)/ ){
  $user     = $1;
  $password = $2;
  $hostname = $3;
  $port     = $4;
  $sid      = $5;
}else{
  die "usage: ora_table_info.pl <user>/<password>@<hostname>:<port>/<sid> <owner>"
}

#dbi:$driver:database=$db;host=$host;port=$port
$dbh = DBI->connect("dbi:$driver:host=$hostname;sid=$sid;port=$port",$user,$password);

$sql_table_name = <<EOS;
select table_name
from all_tables where owner='$ARGV[1]'
order by table_name
EOS
$sth_table_name = $dbh->prepare($sql_table_name);
$sth_table_name->execute();

print "<owner name=\"$ARGV[1]\">\n";
while($table_name=$sth_table_name->fetchrow_array()){

$sql_table_info = <<EOS;
select utcol.column_name,
       utcol.data_type,
       utcol.data_length,
       uccom.comments
from user_tab_cols utcol, user_col_comments uccom
where utcol.table_name = '$table_name' and
      utcol.table_name = uccom.table_name and
      utcol.column_name = uccom.column_name
EOS

  $sth_table_info = $dbh->prepare($sql_table_info);
  $sth_table_info->execute();

  print "  <table name=\"$table_name\">\n";

  print "    <row><!--header-->\n";
  for($i=0; $i<$sth_table_info->{NUM_OF_FIELDS}; $i++){
    print "      <column name=\"$sth_table_info->{NAME}->[$i]\">$sth_table_info->{NAME}->[$i]<\/column>\n";
  }
  print "    <\/row><!--header-->\n";

  while(@row=$sth_table_info->fetchrow_array()){
    print "    <row>\n";
    for($i=0; $i<$sth_table_info->{NUM_OF_FIELDS}; $i++){
      print "      <column name=\"$sth_table_info->{NAME}->[$i]\">$row[$i]<\/column>\n";
    }
    print "    <\/row>\n";
  }

  print "  </table>\n";

  $sth_table_info->finish();

}
print "<\/owner>\n";

$sth_table_name->finish();
$dbh->disconnect();

2015.4.5

出力がXML形式ではなかったため、

<table>..</table>

<table>..</table>

から

<owner>

<table>..</table>

<table>..</table>

</owner>

の形式に修正


実行してみる

$ ./ora_table_info.pl 
usage: ora_table_info.pl <user>/<password>@<hostname>:<port>/<sid> <owner> at ./ora_table_info.pl line 15.
$ ./ora_table_info.pl hr/hr@192.168.0.19:1521/xe HR
<owner name="HR">
  <table name="COUNTRIES">
    <row><!--header-->
      <column name="COLUMN_NAME">COLUMN_NAME</column>
      <column name="DATA_TYPE">DATA_TYPE</column>
      <column name="DATA_LENGTH">DATA_LENGTH</column>
      <column name="COMMENTS">COMMENTS</column>
    </row><!--header-->
    <row>
      <column name="COLUMN_NAME">COUNTRY_ID</column>
      <column name="DATA_TYPE">CHAR</column>
      <column name="DATA_LENGTH">2</column>
      <column name="COMMENTS">Primary key of countries table.</column>
    </row>
    <row>
      <column name="COLUMN_NAME">COUNTRY_NAME</column>
      <column name="DATA_TYPE">VARCHAR2</column>
      <column name="DATA_LENGTH">40</column>
      <column name="COMMENTS">Country name</column>
    </row>
    <row>
      <column name="COLUMN_NAME">REGION_ID</column>
      <column name="DATA_TYPE">NUMBER</column>
      <column name="DATA_LENGTH">22</column>
      <column name="COMMENTS">Region ID for the country. Foreign key to region_i
d column in the departments table.</column>
    </row>
  </table>
...
    <row>
      <column name="COLUMN_NAME">REGION_NAME</column>
      <column name="DATA_TYPE">VARCHAR2</column>
      <column name="DATA_LENGTH">25</column>
      <column name="COMMENTS"></column>
    </row>
  </table>
</owner>

XML::Simple

作って学ぶ、今どきのWebサービス: 第3回 XML::SimpleであらゆるXML文書を料理する

http://www.ibm.com/developerworks/jp/webservices/library/itm-ws3-xml/


XML::Simple

http://search.cpan.org/~grantm/XML-Simple-2.20/lib/XML/Simple.pm


(xmldump.pl)

#!/usr/bin/env perl

use XML::Simple;
use Data::Dumper;

print Dumper (XML::Simple->new()->XMLin('-'));



http://d.hatena.ne.jp/tigerii/20150328/1427542344

で作ったプログラムの出力結果を読み込んで、データ構造を出力してみる。

1回目

$ ./ora_table_info.pl hr/hr@192.168.0.19:1521/xe HR | ./xmldump.pl | more
$VAR1 = {
          'name' => 'HR',
          'table' => {
                     'EMPLOYEES' => {
                                    'row' => [
                                             {
                                               'column' => {
                                                           'DATA_LENGTH' => {
                                                                            'con
tent' => 'DATA_LENGTH'
                                                                          },
                                                           'COLUMN_NAME' => {
                                                                            'con
tent' => 'COLUMN_NAME'
                                                                          },
                                                           'DATA_TYPE' => {
                                                                          'conte
nt' => 'DATA_TYPE'
                                                                        },
                                                           'COMMENTS' => {
                                                                         'conten
t' => 'COMMENTS'
                                                                       }
...

2回目

$ ./ora_table_info.pl hr/hr@192.168.0.19:1521/xe HR | ./xmldump.pl | more
$VAR1 = {
          'table' => {
                     'DEPARTMENTS' => {
                                      'row' => [
                                               {
                                                 'column' => {
                                                             'COLUMN_NAME' => {
                                                                              'c
ontent' => 'COLUMN_NAME'
                                                                            },
                                                             'DATA_TYPE' => {
                                                                            'con
tent' => 'DATA_TYPE'
                                                                          },
                                                             'DATA_LENGTH' => {
                                                                              'c
ontent' => 'DATA_LENGTH'
                                                                            },
                                                             'COMMENTS' => {
                                                                           'cont
ent' => 'COMMENTS'
                                                                         }
                                                           }
...

出力される順番が毎回違う。。

2015-03-20

国産化黎明期の家庭用電化機器

http://gyao.yahoo.co.jp/player/11022/v00001/v0000000000000000002/

お手紙を頂いた時は 夢ではないかと思いました。

うれしくてうれしくて心がうきうきしてきました。

■配信期間

2015年3月10日〜2015年3月23日

■番組

TALES OF 機械遺産

2015-03-15

内部結合と外部結合

inner join と outer join の違いと覚え方の自分用まとめ(外部表、駆動表もメモ)

http://web.plus-idea.net/2013/04/join-outer-inne/



Visual Representation of SQL Joins

http://www.codeproject.com/Articles/33052/Visual-Representation-of-SQL-Joins

http://www.codeproject.com/KB/database/Visual_SQL_Joins/Visual_SQL_JOINS_V2.png



左外部結合のSQL

SELECT <select_list>
FROM Table_A A
LEFT JOIN Table_B B
ON A.Key = B.Key
WHERE ..


SQL標準である SQL-92 や SQL-99 の仕様書(というか標準文書)はどこで見ることができますか。日本語訳があるとなお良しです。

http://q.hatena.ne.jp/1085111702



OUTERは書かなくてよい?

http://savage.net.au/SQL/sql-92.bnf.html#qualified%20join