1. ホーム
  2. sql

[解決済み] カラム名を取得するためのOracleクエリ

2022-06-27 15:55:19

質問

私はこのようなテーブルから列を取得するためにmySQLクエリを持っています。

String sqlStr="select column_name 
from information_schema.COLUMNS 
where table_name='users' 
and table_schema='"+_db+"' 
and column_name not in ('password','version','id')"

Oracle 11gデータベースで上記のクエリを変更するにはどうすればよいですか?私はテーブル 'users'の結果セットとして、スキーマを指定して特定の列を除いた列名を取得する必要があります。現在、私は新しいテーブルスペースにすべてのテーブルを持っているので、スキーマ名の代わりにテーブルスペース名を指定するのでしょうか?

また、このための一般的な HQL はありますか?私の新しい Oracle データベース (私は Oracle の初心者です) では、テーブルスペース名しかないので、これはスキーマ名と同等です (論理的には?)。

どのように解決するのですか?

オラクルでは information_schema.COLUMNSUSER_TAB_COLS で、現在のユーザが所有するテーブルのためのものです。 ALL_TAB_COLS または DBA_TAB_COLS を使用すると、すべてのユーザが所有するテーブルの

テーブルスペースはスキーマと同等ではありませんし、テーブルスペース名を提供する必要もありません。

スキーマ/ユーザ名を提供することは、もしあなたが ALL_TAB_COLS または DBA_TAB_COLS のように、特定のユーザが所有するテーブルのカラムのためのクエリです。

String sqlStr= "
SELECT column_name
  FROM all_tab_cols
 WHERE table_name = 'USERS'
   AND owner = '" +_db+ "'
   AND column_name NOT IN ( 'PASSWORD', 'VERSION', 'ID' )"

この方法では、SQLインジェクションの危険があることに注意してください。

EDITです。 テーブル名とカラム名を大文字にしました。Oracleでは通常大文字で、二重引用符で囲んで作成した場合のみ小文字または混合文字になります。