TIMESTAMP型が含まれるテーブルの列名の取得方法
- Oracle 11gを使用しているSQL初心者です。テーブルの列名を取得する方法についての質問です。
- テーブルの列名を取得するときは以下のSQLで取れると思っています。しかし、テーブルにTIMESTAMP型が含まれていると「レコードが選択されませんでした。」と表示されます。
- TIMESTAMP型が含まれるテーブルは上記のSQLでは取得できないのでしょうか。TIMESTAMP型が含まれるテーブルの列名の取得方法をご存知の方がいらっしゃいましたら、ご教示ください。
- ベストアンサー
TIMESTAMP型が含まれるテーブルの列名の取得
Oracle 11gを使用しているSQL初心者です。 テーブルの列名を取得する方法についての質問です。 テーブルの列名を取得するときは以下のSQLで取れると思っています。 select column_name from user_tab_columns where table_name = 'テーブル名'; --実行結果-- COLUMN_NAME ------------------------------ NAME1 NAME2 しかし、テーブルにTIMESTAMP型が含まれていると 「レコードが選択されませんでした。」 と表示されます。 TIMESTAMP型が含まれるテーブルは上記のSQLでは取得できないのでしょうか。 TIMESTAMP型が含まれるテーブルの列名の取得方法をご存知の方がいらっしゃいましたら、 ご教示ください。よろしくお願い致します。
- fantaoisi
- お礼率100% (2/2)
- Oracle
- 回答数1
- ありがとう数15
- みんなの回答 (1)
- 専門家の回答
質問者が選んだベストアンサー
こんにちわ。 > TIMESTAMP型が含まれるテーブルは上記のSQLでは取得できないのでしょうか。 通常、そのような事はありません。 問題のテーブルにアクセスできるユーザからuser_tab_columns ビューを 参照している前提で、考えられる原因が3つあります。 1) 別スキーマにテーブルがある。 user_tab_columns ビューは、自スキーマに定義されているテーブルの 列情報を持ちます。 all_tab_columns ビューで情報が取得できるか確認して下さい。 ※ all_tab_columns ビューのowner 列にテーブルの所有者名が 格納されています。 2) テーブルが大文字/小文字混在で作成されている。 テーブルを大文字/小文字混在でCreate table しても、大文字でテーブルが 作成されますが、テーブル名をダブルクォーテーションで囲むと大文字/小文字 混在で作成させる事ができます。 その場合、ディクショナリにもテーブル名は大文字/小文字混在で格納されて います。 where upper(table_name) = upper('テーブル名') で確認してみて下さい。 3) Synonym 経由で別の表にアクセスしている。 Synonum 経由で別の表にアクセスしている場合も、user_tab_columns や all_tab_columns ビューには列情報は格納されません。 select owner, object_type, object_name from all_objects where object_name = '先に指定したテーブル名'; 上のSQL で、どの所有者のどのようなオブジェクトにアクセスしているか 確認してみて下さい。
関連するQ&A
- SQLServerで列名取得
Microsoft SQL Server2014 ManagementStudio を Windows7 で使用しています。 テーブルのカラム(列)名を取得したくて いろいろ調べてみましたが SELECT COLUMN_NAME FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = N'TestTable' ORDER BY ORDINAL_POSITION とか、 select name from Sys.Columns where object_id = object_id('TestTable') を実行しても、空のデータしか表示されません。 何がまちがっているのか教えてください。
- ベストアンサー
- その他(ソフトウェア)
- Oracle SQLの、where句内の条件文について教えてください。
Oracle SQLの、where句内の条件文について教えてください。 下記SQLの(1)と(2)の記述文を教えてください。 (1)例:owner = sys,admin ownerがsysまたは、adminを抽出 (2)例:column_name = '*aaa*' column_nameに「aaa」が含まれているデータ SELECT owner, table_name,column_name FROM all_tab_columns WHERE (1)(Ownerを複数指定) and (2)(column_nameに、●●が含まれるデータ)
- 締切済み
- Oracle
- テーブルの列名を変更したい
お世話になります Oracleデータベースで テーブルの列名を変更したいのですが、 どのような方法があるでしょうか? 入っているデータを消したくないので、 テーブルを作りなおすという方法はあまりとりたくありません もしかして、Create Tableしなおさないと無理? よろしくお願いします。
- ベストアンサー
- その他(データベース)
- Oracle8でテーブルの列名を変更したい
Oracle8のテーブルを利用しているのですが、あるテーブルの列名が 誤っていることに気付きました。データはそのままで列名だけ変更したい のですが、できるのでしょうか?できるのでしたら、方法を教えていただけ るとありがたいです。OracleやSQL関係の本を読んでみたのですが 探し出せませんでしたので、こちらでお世話になることにしました。 よろしくお願いします。(私自身はOracleは利用するのみで、ほとんど 素人に近いです。SQL*Plusは使ったことがあります。)
- ベストアンサー
- その他(データベース)
- カラム情報(主キー、データ型、桁数等)を取得するには
テーブルに格納されているカラム情報(カラム名、主キー、データ型、データの桁数)を取得したいと考えています。 主キー情報とそれに付随するカラム情報は現在下記のSQL文で取得しています。 SELECT C.TABLE_NAME , COL.COLUMN_NAME, C.CONSTRAINT_TYPE, COL2.DATA_TYPE, COL2.DATA_LENGTH FROM USER_CONSTRAINTS C, USER_CONS_COLUMNS COL, USER_TAB_COLUMNS COL2 WHERE C.TABLE_NAME = COL.TABLE_NAME AND C.CONSTRAINT_NAME = COL.CONSTRAINT_NAME AND C.TABLE_NAME = COL2.TABLE_NAME AND COL.COLUMN_NAME = COL2.COLUMN_NAME AND C.CONSTRAINT_TYPE = 'P' AND UPPER(C.TABLE_NAME) = UPPER('テーブル名') ORDER BY C.TABLE_NAME, COL.POSITION ここで、主キー以外のカラムに対しても同様にカラム情報を取得したいのですが、どのように取得すればよろしいでしょうか? ※カラム名、主キー有無、データ型、桁数 でカラム情報を取得できれば最も良いのですが、 主キー情報を除いた全体のカラム情報を取得する事ができれば、こちらの情報でも助かります 宜しくお願い致します。
- 締切済み
- Oracle
- コラムの値からコラム・テーブルを検索
プライマリキーが様々なテーブルで別の名前で利用されていると、テーブル同士の関連の全てが把握できずに困っています。以前にコラム名からテーブルを検索する方法を質問したのですが、私が扱っているデータベースでは、プライマリキーがシステムの別の場所で少しだけ異なる名前で利用されていることが多いので、その方法では把握できない関連が出てきます。 具体的には、EMPLOYEES__KEYというEMPLOYEESテーブルのプライマリキーがPERSONALIZE_EMPOYEESというテーブルでPSNLZ_EMP__KEYという名前で使われている状況を考えていただきたいと思います。PSNLZ_EMP__KEYのコラムのレコードは全てEMPLOYEES__KEY内のデータからとられているとします。 以前にselect TABLE_NAME from USER_TAB_COLUMNS where COLUMN_NAME = 'EMPLOYEES__KEY' というSQLで特定のコラムを使っているテーブルを全てリストアップできると教えていただいたのですが、今回のケースでは、同じような内容のコラムなのですが名前が異なるため上記のSQLでは検索できないテーブルがある場合、それをどうやってとってきたらよいのかということです。 コラムの値にtaro, jiro, hanakoなどのようにテーブルまたはシステム内でユニークな値が指定されている場合、コラムの値を指定し、「その値が使われているコラム・テーブルを列挙せよ」というような命令を与えればよいのだということまでは分かりますが、どのようにSQLを書けば良いか教えてください。
- ベストアンサー
- Oracle
- まったく別のテーブルの結果MYSQL
table_1 id name age table_2 id book title city day SELECT * FROM table_1 WHERE id=? SELECT book,title FROM table_2 WHERE city=? このようにまったく別のテーブル カラム数も違う WHEREの?も違う これを一つのSQL文にまとめたいのですが。 UNIONなどを使ってもうまくいきませんでした。 ご教授お願いいたします。
- ベストアンサー
- MySQL
- TIMESTAMPについて
MySQLを用いて会員管理システムを構築しております。 仮登録者テーブルと本登録者テーブルの二つを用意しており、 仮登録者の本人確認が取れた時点で、本登録者テーブルへ データを丸々コピーする仕様にしております。 この際に、仮登録日時をTIMESTAMPを用いて日時を取得していますが、 本登録者テーブルへデータをコピーするタイミングで、【 本登録日時 】を 計算させるSQL文等をどの様に記述すればいいのかが分かりません。 現在は、この様なSQL文にしております。 ---------------------------------------------------------------------- $sql = "INSERT INTO user_table SELECT * FROM user_table_2 WHERE (number = ".intval($number).");"; ---------------------------------------------------------------------- user_table_2( 仮登録者テーブル )のデータをuser_table( 本登録者テーブル )へ コピーします。 【 仮登録の日時 】+【 本登録操作を行った日時 】=【 本登録日時 】という計算を WHERE句で実行出来るものなのでしょうか? それとも他に別の方法がありましたら、何卒ご教授いただきたく存じます。 各スペックは以下の通りです。 ---------------------------------- PHP 5.1.6 MySQL 5.0.77 サーバOS Linux ---------------------------------- どうぞよろしくお願いいたします。
- ベストアンサー
- PHP
- テーブル名をカラムとして取得する方法
テーブル名をカラムとして取得する方法はありますでしょうか? オラクル8とVB6でプログラムを組んでいます。 例 TABLE Aの内容 カラム1 1 2 3 TABLE B カラム1の内容 4 5 6 SQLは簡略化してかきます。下記のSQLを実行した場合、 select A.カラム1 from A union select b.カラム1 from b 1 2 3 4 5 6 を取得できます。 例えば、上記で、SQL実行後、 下記のような値を取得したいです。 1 ,Aのテーブルだよ 2 ,Aのテーブルだよ 3 ,Aのテーブルだよ 4 ,Bのテーブルだよ 5 ,Bのテーブルだよ 6 ,Bのテーブルだよ それぞれのテーブルの名前を別名で結果に格納したいのです。 何か方法はありますでしょうか? なければ、unionせずに、2回SQLを発行し、それぞれに、 プログラム上で、「Aのテーブルだよ」を後で挿入したいと思っています。
- ベストアンサー
- Oracle
- SQLについてアドバイスください。
USER_TAB_COLUMNSから入力したテーブル名で構造を抽出し SQL文を作成出来るものを作ろうとしています。 80%までうまく行くのですが、SELECT文でフィールドをカンマ付けで置いていく 所で最後のフィールドに来た時カンマが付加されてしまいます。 これを最後のフィールドに来た時カンマが付加されないでスペースで置くように したいのですが。。 set pagesize 0 set linesize 1000 set trimspool on set feedback off set verify off ACCEPT TABLE CHAR PROMPT 'TABLE NAME:' set termout off spool C:\TEST_csv.sql SELECT 'SELECT ' FROM DUAL; SELECT COLUMN_NAME || ',' FROM USER_TAB_COLUMNS WHERE TABLE_NAME = UPPER( '&TABLE' ) ORDER BY COLUMN_ID; SELECT 'FROM DUAL' FROM DUAL; SPOOL OFF
- 締切済み
- その他([技術者向] コンピューター)
お礼
丁寧な回答ありがとうございます。 おかげで解決することができました。なんと仕様書上大文字小文字が混ざっていたのですが、実際には全て大文字でテーブル名が作られていたことが原因でした。 回答を試している内に気付きました。