• ベストアンサー

Oracleのビュー作成時に「指定した列名の個数が無効です」エラー

初歩的な質問かと思いますが、宜しくお願い致します。 Oracle10gでViewを作成する際に、以下のようなSQLを発行しています。 SELECT 列名1 FROM テーブル名1 この際、スケール(小数点)ありの列名を指定すると 「指定した列名の個数が無効です」というエラーが表示されてしまうのですが、エラー原因がわかりません。 (スケールなしの列名は問題なし) お手数ですが、ご教示いただけませんでしょうか。

  • Oracle
  • 回答数1
  • ありがとう数1

質問者が選んだベストアンサー

  • ベストアンサー
回答No.1

できればSQLの提示してください。 私の10g(release2ですが)環境で以下のテーブルとデータを作成します。 create table hoge ( p_code number(4) primary key, name_1 varchar2(20), score number(4,2) ); insert into hoge values(1,'hoge1',6.2); insert into hoge values(2,'hoge2',9.8); insert into hoge values(3,'hoge3',null); そこで create view v_hoge(score_val) as select score from hoge; を実行するとビューも作成されてselectで確認できます。列別名を指定しないのであれば create view v_hoge as select score from hoge; でうまくいくはずです。 列別名を入れる場合、selectの列数と同じ数を指定しないと「指定した列名の個数が無効です」のエラーが表示されます。

kuman23
質問者

お礼

ossan_hiro様 ご回答頂き、有難うございます。 ご指摘の内容を確認しましたところ、Viewの以前作成したSELECT 定義が有効になっており、エラーが発生していたようです。 再度、viewの定義を再作成することで、無事表示できるようになりました。 重ねて御礼申し上げます。

関連するQ&A

  • 列名が無効とエラーが出ます。

    SQLServe2000でビューを作成していて困っています。 問題のSQL文は SELECT k.hiduke, year(k.hiduke) as segyear, month(k.hiduke) as segmonth from dbo.S_View_kado2 as k where segmonth=1 上記SQLを実行すると 列名'segmonth'は無効です とエラーが発生します。where文を削除するとエラーは出ません。 where文を where segyear=2009 としてもエラーは起きません。 原因が判らず困っています。 ご回答頂けると幸いです。宜しくお願いいたします。

  • OracleのViewの作り方

    OracleのViewについてですが。。 ‘あ行’という名前のテーブルと‘か行’という名前のテーブルがあるとします。 ‘あ行’テーブルには‘あ’,‘い’,‘う’という列名があり、 ‘か行’には‘か’,‘き’,‘く’,‘あ’,‘い’という列名があるとします。 以上の2つのテーブルから‘ひらがな’というViewを作りたいとします。 このViewの条件としては‘あ行’から‘あ’,‘い’をselectし、‘か行’からは‘あ行’と‘か行’のそれぞれの‘あ’列の項目が同じであるレコードから‘か’と‘あ’と‘い’をselectしてきます。この時‘あ’という列の項目内容は分かっていて、その項目が記載してあるレコードに‘い’の項目内容をupdateしたいとするとどのようにViewを書けばよいのでしょうか?あくまでもそれぞれのテーブルに直接‘い’項目を書くのではなくてViewにおいてUpdateで書きたいのですが。

  • 列名を式で指定することはできますか。

    列名を式で指定することはできますか。 例えば、 SELECT `CONCAT('名', '前')` FROM `顧客` みたいなことがしたいです。

    • ベストアンサー
    • MySQL
  • SELECT文で列名指定して桁あわせしたい

    SQLServerでSELECT文を発行した場合です。 列名をいくつか指定し、そのうちの1つの列名の桁数をあわせたいのですが良い方法はないですか? select A,B,C from xxtbl  例えばc列が8桁charだったとします。 値が”0”の場合に”00000000”としたいのです。 format指定みたいのはないですか?

  • GROUP BY で列名は指定できないの?

    いつもお世話になっております。 SQLで GROUP BY を使うときに SELECT部分で指定した 列名を指定したいことがよくあると思います。 列名を指定する方法はないのでしょうか? 例) SELECT 項目A, CASE WHEN 項目B = 1 THEN '○' WHEN 項目B IN (2,3) THEN '×' END AS 丸バツ, SUM(数量) FROM TABLE GROUP BY 項目A, 丸バツ こんな風にGROUP BYで指定したいのですが・・・。

  • オラクルではできるのにSQLSERVERではサブクエリーで複数キーを指定できない?

    サブクエリーで複数キーを指定したいです。例えば以下のようなSQLですが、 SQL> > select * from テーブルA > where (key1,key2) in (select key1,key2 from テーブルB) このSQLはオラクルでは実行できますが、SQLSERVERでは文法エラーになってしまいます。SQL SERVER ではサブクエリーで複数キーを指定するのは不可能なのでしょうか?

  • Oracleで「文字が無効です」のエラーが出ます

    Oracleで「文字が無効です」のエラーが出ます JavaからOracleに接続して、SELECT文を発行していますが、何度試しても上記のエラーが出ます。 発行しているSELECT文を、SQLPlusから打ち込むとちゃんと実行できます。 何が悪いのか見当がつきません。 お知恵をお貸しください。 ちなみに、対象テーブルの項目はvarchar2とnumberだけの項目ばかりで、日本語は使ってません。 また、Oracle初心者です。 環境 端末:WindowsXP Oracle:10g Express Edition ※文字コードはAL32UTF8 IDE:Eclipse3.5 ※設定-一般-ワークスペースのテキストファイルエンコードはUTF-8

  • オラクルの条件で時間を指定する方法

    オラクルの条件で時間を指定する方法と格闘中です。 ログのようなデータがたくさんあってそこから、 18時~翌2時のデータはいくつあるか。 というSQL文を書きたいのですが、 うまくいきません。以下のようなSQLなのですが、 どなたかアドバイスいただけないでしょうか? SELECT COUNT(*) as CNT, ID FROM テーブル名 WHERE TO_DATE(DATE型カラム, 'HH24:MI') >= '18:00' AND TO_DATE(DATE型カラム, 'HH24:MI') < '02:00' GROUP BY ID ORDER BY CNT; ちなみにこんなエラーが出ています。 SQLエラー: ORA-01843: 指定した月が無効です。 よろしくお願いいたします。

  • ダイレクトインサートでテーブル作成時カラム長を指定

    oracle10g standard 下記のようなsqlでviewをtable化するとvarchar2のカラム長が固定で4000になります。 長さを指定することはできますか? create table test as select * from view;

  • 列名が無効です

    For hcnt = 1 To 18 w1_kin = 0 cmd.CommandText = "SELECT sum(sisitu_db) FROM syosai " _ & "WHERE hno_db = hcnt " w1_kin = cmd.ExecuteScalar() + w1_kin 省略 NEXT テーブルの列hno_dbにあるコード1から18毎の金額合計を求める のですが、上記の式(コード1の場合)では「hcntは列名の無効」となります。 hno_db = 1 では正しく実行されます。 宜しくお願いします。