名前が「bar」で始まるデータベース内のすべてのテーブルを表示または検索したいと考えています。それはコマンドラインからできることですか?
インフォミックスを使用しています。
select tabname from systables where tabname like "%bar%"
それを見つけた!
基本的な回答は、システム カタログに対するクエリです ( user856753による回答に示されているように)。すべてのタイプの Informix データベースに対して確実に動作するようにしたい場合は、おそらく次を使用します。
dbaccess dbname - <<'EOF'
SELECT TabName FROM informix.SysTables WHERE TabName LIKE 'bar%';
EOF
他の回答のクエリは、で始まるものだけでなく、名前のどこかにLIKE '%bar%'
含まれるテーブル名と一致するものを使用することに注意してください(ただし、それらも選択します)。を使用すると、 (データベースが)たまたま MODE ANSI データベースであっても、クエリが機能することが保証されます。所有者名がない場合、ユーザーが実行した場合、クエリは MODE ANSI データベースに対してのみ機能します。bar
bar
informix.SysTables
dbname
informix
Informix で配布されているデータベースを照会するための主なコマンド ライン ツールは、dbaccess
. 最初の引数はデータベース名、2 番目の ( -
) はスクリプトの名前 (この場合-
は「標準入力を読み取る」を意味します) であり、<<'EOF'
表記法は「このコマンドの標準入力がセットである」のシェルスピークです。だけを含む行までの行EOF
。意味を囲む一重引用符は、'EOF'
「入力が呼び出されたときに「ヒアドキュメント」の素材に対してシェル展開を行わないことを意味します。スクリプトでデータベースを選択する場合は-
、コマンドラインでデータベース名の代わりにa を使用できます。そのようなオプションなしで実行dbaccess
すると、curses のような対話モードで実行されます。
これにより、表形式の出力が得られますdbaccess
。多くの場合、「OUTPUT」コマンドを使用して出力を改善できます。
dbaccess dbname - <<'EOF'
OUTPUT TO '/dev/null' WITHOUT HEADINGS
SELECT TabName FROM informix.SysTables WHERE TabName LIKE 'bar%';
EOF