質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Oracle

Oracleは、米オラクルが取り扱うリレーショナルデータベース管理システムです。メインフレームからPCまで、多様なプラットフォームに対応しています。

SQL

SQL(Structured Query Language)は、リレーショナルデータベース管理システム (RDBMS)のデータベース言語です。大きく分けて、データ定義言語(DDL)、データ操作言語(DML)、データ制御言語(DCL)の3つで構成されており、プログラム上でSQL文を生成して、RDBMSに命令を出し、RDBに必要なデータを格納できます。また、格納したデータを引き出すことも可能です。

Q&A

解決済

3回答

7345閲覧

[Oracle SQL ]View作成時にソートをしたい

ssss.G

総合スコア12

Oracle

Oracleは、米オラクルが取り扱うリレーショナルデータベース管理システムです。メインフレームからPCまで、多様なプラットフォームに対応しています。

SQL

SQL(Structured Query Language)は、リレーショナルデータベース管理システム (RDBMS)のデータベース言語です。大きく分けて、データ定義言語(DDL)、データ操作言語(DML)、データ制御言語(DCL)の3つで構成されており、プログラム上でSQL文を生成して、RDBMSに命令を出し、RDBに必要なデータを格納できます。また、格納したデータを引き出すことも可能です。

0グッド

0クリップ

投稿2019/04/23 08:44

編集2019/04/24 07:46

前提・実現したいこと

オラクルSQLでソートが出来ているViewを作成したいです。
追記:プロジェクト規約で VIEW を使用する必要があります 2019/04/24

sql

1CREATE 2OR REPLACE VIEW sample( 3 4) AS ( 5 SELECT 6 FROM 7 JOIN 8 WHERE 9 ORDER BY 10) WITH READ ONLY;

発生している問題・エラーメッセージ

CREATE VIEWをしたところエラーが発生しました。

コマンドの行:1、列:2,842でのエラー エラー・レポート: SQLエラー: ORA-00907: 右カッコがありません。 00907. 00000 - "missing right parenthesis"

試したこと

ORDER BY句をSQLから削除したらVIEWが作成されました。
ただ、今のところソートをする必要があるようなので何か解決策は無いでしょうか?

補足情報)

公式リファレンスに"SELECT問合せの制限"があると書いてあり、ORDER BY句以外でのソート方法が必要なのかなと考えています。
Oracle TimesTen In-Memory Database SQLリファレンス・ガイド

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答3

0

ベストアンサー

SELECT句を囲んでいるかっこを除いたら、少なくともコンパイルはできませんか?
見当違いでしたらすみません。

sql

1CREATE 2OR REPLACE VIEW sample( 3 4) AS 5 SELECT 6 FROM 7 JOIN 8 WHERE 9 ORDER BY 10WITH READ ONLY;

投稿2019/04/23 11:45

q1701

総合スコア274

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

ssss.G

2019/04/24 05:10

コメントありがとうございます。 SELECT句を囲んでいるかっこを除いて実行したところ、コンパイル成功しVIEWが作成出来ました。 参考として頂いたデータに ()があったので、必要なものだと思っていたのですが()をつける意味が分かれば教えて頂きたいです。 よろしくお願いします。
ssss.G

2019/04/24 07:43

"SELECT句を囲んでいるかっこを除く"方針で行くと規約の改正?がありました。 コメントのおかげで問題が解決できました、ありがとうございました!
q1701

2019/04/25 14:30

コメントいただいていたのに、気づきませんでした。 ベストアンサーとしていただきましたが、少々気になる点がございます。 TimesTen ではなく普通の Oracle Database ですよね。 であれば、CREATE VIEW のリファレンスは https://docs.oracle.com/cd/E82638_01/sqlrf/CREATE-VIEW.html こちらですね。(バージョン 12.2 と仮定しました。) CREATE VIEW で ORDER BYは、使用可能です。 ただし、 ・更新可能なビューにする場合 ・subquery_restriction_clause を指定する場合 については、ORDER BYを指定できないとの記載がありました。 WITH READ ONLY は subquery_restriction_clause に含まれます。 リファレンスを見る限り、WITH READ ONLY と ORDER BY は同時に指定してはいけないようです。 カッコの有無の違いについてですが、 これはちょっと分かりませんでした。 上記リファレンスを見ると、構文図の記載があります。 ここには引用しづらいので詳しくは書きませんが、 「AS」の後ろには「subquery」を指定することになっており、 この「subquery」に「ORDER BY」が含まれるのか、読み取りづらいです。 CREATE OR REPLACE VIEW sample(xxx) AS (SELECT xxx FROM xxx JOIN xxx WHERE xxx = xxx ) ORDER BY xxx WITH READ ONLY; このように、 ORDER BY を外に出せば、コンパイルは通るようです。 ただ、前述したとおりですので、これでよいのかは別問題かと思います。 個人的には、上記 WITH READ ONLY の制約がなかったとしても、 ビューの定義にORDER BYを指定したいと思ったことは、過去に一度もないですね。 Orlofsky さんのご回答にあるとおり、VIEWをSELECTするときに、ORDER BYを指定するのが、普通だと思います。
ssss.G

2019/04/26 04:55

調べてくださりありがとうございます。 リファレンス読んでみます。 規約に問題があるような気もするので確認もとることにします。
guest

0

CREATE VIEW した後、データが追加されたり、変更されたら、データを並び替え直さなければなりませんから、

SQL

1CREATE OR REPLACE VIEW sample AS 2SELECT A.COL1, B.COL2, ... 3FROM TABLE_A A 4INNER JOIN TABLE_B B 5ON A.COL1 = B.COL1 6WHERE ... -- 必要な条件 7WITH READ ONLY;

とVIEWを作っておき、VIEWのSELECT時にORDER BYします。

SQL

1SELECT * 2FROM sample 3ORDER BY ... -- 並べたい列 4;

パラレル実行 でパフォーマンスを改善したり、、、

投稿2019/04/23 11:06

Orlofsky

総合スコア16415

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

今のところソートをする必要があるようなので何か解決策は無いでしょうか?

CREATE VIEW

次のものはビューの作成に使用するSELECT文で使用できません。
・DISTINCT
・FIRST
・ORDER BY
・引数
・一時表

色々ありそうなので、VIEWではなくテーブルファンクションが良さそうに思います。
第75回 「テーブル・ファンクション ~表のように問い合わせできるファンクション~」

投稿2019/04/23 11:39

編集2019/04/24 06:14
sazi

総合スコア25195

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

ssss.G

2019/04/24 05:11

コメントありがとうございます。 今回はVIEWを使う必要があるのでテーブルファンクションは使えないようです。 あまり情報を出せず申し訳無いです。
sazi

2019/04/24 06:21

VIEWにできない事を分かっていて、解決策を求めて質問しているのに、 >今回はVIEWを使う必要があるのでテーブルファンクションは使えないようです。 「VIEW」限定と言われる意味が分かりません。 質問する意味ないじゃないですか。 単なるプロジェクトの規約なら、order byできる他の方法がありメリットがあるなら、規約を改正するようにすれば良いのではないでしょうか。
ssss.G

2019/04/24 07:40

このままのSQLでは"ORDER BYを使ってでソートしようとすると、VIEW作成に失敗"することしかわかっていませんでした。 ・SQLに手を加えORDER BYを使ってソート出来るやり方 ・ORDER BY以外を使用してのソートのやり方 まずはこの2点で解決策がないか知りたかったため質問をしました。 又、プロジェクトの規約が"VIEWを使う"ことなので、タイトルや前提にそのように書いたつもりです。  質問がわかりづらかったのであれば、指摘もらえれば次から気をつけます。
sazi

2019/04/24 10:27

VIEWを使うという規約なら、order by が必要な場合についても言及されていなければ、規約の質が問題だと思いますけどね。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問