2012-02-23 12 views
0

次のクエリ:のOracle 10gの予期しない "無効な文字" エラー

SELECT * FROM VIEW_NAME_HERE 

ORA-00911: invalid characterエラーが発生します。 SQL Developer、Oracle SQL Developer、Toadを使用して、またJavaアプリケーションから実行しようとしました。

VIEW_NAME_HEREです。ビューを作成するために使用されるSQLクエリは次のとおりです。他のビューや表から

SELECT DISTINCT table1_alias.id2 AS col1 , 
       table1_alias.col2, 
       table1_alias.col3 
FROM table1 
INNER JOIN table1 table1_alias 
    ON table1.id1 =table1_alias.id2 
WHERE table1_alias.id2<>-55 AND table1_alias.LVL=1 
UNION 
SELECT col1 ,col2,col3 
FROM table2 WHERE col1> 0 AND col4 = 1 
AND LVL = 2 

SELECT *は正常に動作します。

ヒントは歓迎します。

+0

ビュー定義を投稿できますか? – a1ex07

+0

@ a1ex07が掲載されています。 – khachik

+0

*実際のビュー名は何ですか? 'create view'コマンドで名前を二重引用符で囲んでいますか? –

答えて

0

私は、Oracle 10gでテストケースを再現することはできません。

SQL> create table table1 (id2 number, col2 number, col3 number, id1 number, lvl number); 

Table created. 

SQL> create table table2 (col1 number, col2 number, col3 number, col4 number, lvl number); 

Table created. 

SQL> create view view_name_here as 
    2 SELECT DISTINCT table1_alias.id2 AS col1 , 
    3     table1_alias.col2, 
    4     table1_alias.col3 
    5 FROM table1 
    6 INNER JOIN table1 table1_alias 
    7  ON table1.id1 =table1_alias.id2 
    8 WHERE table1_alias.id2<>-55 AND table1_alias.LVL=1 
    9 UNION 
10 SELECT col1 ,col2,col3 
11 FROM table2 WHERE col1> 0 AND col4 = 1 
12 AND LVL = 2; 

View created. 

SQL> select * from view_name_here; 

no rows selected 
0

私は「引用符で囲まれた識別子(それが作成されたときに名前が二重引用符で囲まれたことが、あなたのビュー名が無効な文字が含まれている疑いがあるが、 'それは許可されたので、ドキュメントによると);あなたが二重引用符を省略しているときにクエリを実行します。

create view "MY~VIEW" as select * from dual; 

View created. 

select * from MY~VIEW; 
       * 
Error at line 1: 
ORA-00911: invalid character 

しかし、これは動作します:何かのように

select * from "MY~VIEW"; 

D 
- 
X 

実際の文字はもちろんの何か他のもの、かもしれないが、(少なくともSQL * Plusで)エラーが親切*でそれを強調しています。 SQL参照にはsection on naming objectsがあります。私はそれがケースの違いで問題が発生しますが、微妙な相手を持つことができ、通常ので、良い練習(私は意見が異なります確信しているが)と見なされていないあなたは、二重引用符でオブジェクト名を囲むルール7.

を破壊している推測していますこのような効果。引用符をオフにするほうがずっと簡単です。オラクルがすべてのオブジェクトを大文字の名前で作成し、オブジェクト作成時に問題を発見できるようにしてください。

+0

実際のビュー名は 'VIEW_PIP_EXEC_MINISTRY'です。 – khachik

+0

これは問題ありません。あなたはちょうど 'select * from VIEW_PIP_EXEC_MINISTRY'をしていますか?そして列名(特にエイリアス化されたもの)のどれも奇数の文字やqoutを持たないのですか? –