ORACLE TECHNOLOGY NETWORK
 
 
   

Oracle Technology Network (OTN) Japan - 掲示板 » コミュニティ » 初心者の部屋

スレッド: 動的SQL実行時に「ORA-01747: user.table.column、table.columnまたは列指定が無効です。」

このスレッドに返信する このスレッドに返信する スレッド一覧へ スレッド一覧へ

Permlink 返信数: 33 - ページ数: 3 [ 前へ | 1 2 3 | 次へ ] - 最新投稿 : 2008/06/06 18:27 最新投稿者: Nori0825 - スレッド表示形式:
でで

投稿数: 9,980
登録日時: 00/10/25


Re: 動的SQL実行時に「ORA-01747: user.table.column、table.columnまたは列指定が無効です。」
投稿時刻: 2007/02/22 14:01   Nori0825 さんへの返信です。 Nori0825 さんへの返信です。
  このスレッドに返信します… 返信

> 実は、記載したPLはほんの一部でして、この切り出したPLの実行前には
> 数本のInsert文が記述してあり、どれも普通に実行して、テーブル内には
> 目的のレコードがなんの障害もなくInsertされます。

別のテーブルにinsertしているのでは?このテーブルに挿入できていますか?

Nori0825

投稿数: 18
登録日時: 07/02/22


Re: 動的SQL実行時に「ORA-01747: user.table.column、table.columnまたは列指定が無効です。」
投稿時刻: 2007/02/22 14:03   jakemystar さんへの返信です。 jakemystar さんへの返信です。
  このスレッドに返信します… 返信

ありがとうございます。
直ぐには理解できそうにないです。
がんばってみます。

pchan

投稿数: 1,679
登録日時: 06/02/02


Re: 動的SQL実行時に「ORA-01747: user.table.column、table.columnまたは列指定が無効です。」
投稿時刻: 2007/02/22 14:06   Nori0825 さんへの返信です。 Nori0825 さんへの返信です。
  このスレッドに返信します… 返信

> 実は、記載したPLはほんの一部でして、この切り出したPLの実行前には
> 数本のInsert文が記述してあり、どれも普通に実行して、テーブル内には
> 目的のレコードがなんの障害もなくInsertされます。

すべてCOLLECTスキーマのテーブルですか?

うぇいく

投稿数: 5,807
登録日時: 99/12/20


Re: 動的SQL実行時に「ORA-01747: user.table.column、table.columnまたは列指定が無効です。」
投稿時刻: 2007/02/22 14:07   Nori0825 さんへの返信です。 Nori0825 さんへの返信です。
  このスレッドに返信します… 返信

>ORA-00904: "CEP区分,": 無効な識別子です。
>とのエラーが帰されます。
>私の記述ミスでしょうか・・・
エラーメッセージを見て判るとおり、「,」の位置が、""の間にはいっちゃってませんか?
-- CMN v0.50dβ うぇいく --

jakemystar

投稿数: 924
登録日時: 06/10/28


Re: 動的SQL実行時に「ORA-01747: user.table.column、table.columnまたは列指定が無効です。」
投稿時刻: 2007/02/22 14:12   Nori0825 さんへの返信です。 Nori0825 さんへの返信です。
  このスレッドに返信します… 返信

それほど難しいことは無いと思います。
こちらご参考ください。
実際に発行されているSQLを確認するのが解決の早道だと思います。

SQL> SET SERVEROUTPUT ON
SQL> DECLARE
2 A1 VARCHAR2(10);
3 BEGIN
4 A1 := '0123456789';
5 DBMS_OUTPUT.PUT_LINE(A1);
6 END;
7 /
0123456789

PL/SQLプロシージャが正常に完了しました。

Dojippe

投稿数: 188
登録日時: 02/06/22


Re: 動的SQL実行時に「ORA-01747: user.table.column、table.columnまたは列指定が無効です。」
投稿時刻: 2007/02/22 14:25   Nori0825 さんへの返信です。 Nori0825 さんへの返信です。
  このスレッドに返信します… 返信

エラー内容はうぇいくさんが指摘している通りだと思います。

あと、権限不足の指摘が気になっています。

pl/sqlでは他のスキーマのオブジェクトへの更新にはシステム権限ではなく
オブジェクト権限が必要です。
user_tab_privsを参照してinsert権限があるか確認してください

Nori0825

投稿数: 18
登録日時: 07/02/22


Re: 動的SQL実行時に「ORA-01747: user.table.column、table.columnまたは列指定が無効です。」
投稿時刻: 2007/02/22 14:39   でで さんへの返信です。 でで さんへの返信です。
  このスレッドに返信します… 返信

はい、Insertされています。
SQL単体実行しても、Insertされていました。

Nori0825

投稿数: 18
登録日時: 07/02/22


Re: 動的SQL実行時に「ORA-01747: user.table.column、table.columnまたは列指定が無効です。」
投稿時刻: 2007/02/22 14:46   うぇいく さんへの返信です。 うぇいく さんへの返信です。
  このスレッドに返信します… 返信

変数名が正しくありません
とのエラーが帰ってきます。SQL文の項目名ではなく、変数名として認識してしまうようです。



> >ORA-00904: "CEP区分,": 無効な識別子です。
> >とのエラーが帰されます。
> >私の記述ミスでしょうか・・・
> エラーメッセージを見て判るとおり、「,」の位置が、""の間にはいっちゃってませんか?
> -- CMN v0.50dβ うぇいく --

Nori0825

投稿数: 18
登録日時: 07/02/22


Re: 動的SQL実行時に「ORA-01747: user.table.column、table.columnまたは列指定が無効です。」
投稿時刻: 2007/02/22 15:06   pchan さんへの返信です。 pchan さんへの返信です。
  このスレッドに返信します… 返信

皆様、お手数をかけております。
詳細なご回答をいただき、ありがとうございます。

> すべてCOLLECTスキーマのテーブルですか?

皆様にお知恵を拝借しているPL/SQLに記述のあります、同じスキーマCOLLECT
にあるテーブルです。
また、同じPL/SQLの中で別テーブルへもInsertしておりますが、そちらは上手く
動作しております。---(1)
尚、InsertされているTBLはVB6からキックした別のPL/SQLで作成したTBLです。
(1)のInsertされているTBLも例外ではありません。


> > 実は、記載したPLはほんの一部でして、この切り出したPLの実行前には
> > 数本のInsert文が記述してあり、どれも普通に実行して、テーブル内には
> > 目的のレコードがなんの障害もなくInsertされます。
>

ushitaki

投稿数: 7,079
登録日時: 98/10/30


Re: 動的SQL実行時に「ORA-01747: user.table.column、table.columnまたは列指定が無効です。」
投稿時刻: 2007/02/22 17:26   Nori0825 さんへの返信です。 Nori0825 さんへの返信です。
  このスレッドに返信します… 返信

↑↑↑ フラットで見える直ぐ上の投稿。
○数字は時間が経つと化けますので編集できるうちに
編集して (1) とかにして下さい。

-----

> ORA-00904: "CEP区分,": 無効な識別子です。
> とのエラーが帰されます。
> 私の記述ミスでしょうか・・・

記述ミスか日本語を利用しているせいで発生する問題かと思われます。
カンマまでが識別子になっていますねぇ。
vc_SQL を dbms_output.put_line で出力させてください。

長い場合は substr で適当な長さで切る必要があります。

#今回はシビアそうですので...
#単純に 60 bytes づつとか 80 bytes ずつでは切るのは拙そうです。
#誰かが2バイトの区切りに正しく対応して切り刻んでくれるようなtips を
#登録していた気がするのですが見つかりませんでした。

-- 追記:最初に投稿している範囲なら簡単に出力できますね。
set serverout on
declare vc_SQL varchar(512);
vc_ClientNo_IN varchar(20) := '%%vc_ClientNo%%';
vc_Date_IN varchar(10) := to_char(sysdate,'yyyy/mm/dd');
nm_ShitenCD_IN number(5) := 99999;
begin
vc_SQL := '';
vc_SQL := ' INSERT INTO COLLECT.WORK売上明細WK_TODAY' || vc_ClientNo_IN;
vc_SQL := vc_SQL || ' (';
vc_SQL := vc_SQL || ' 補償区分,';
vc_SQL := vc_SQL || ' '|| '''CEP区分''' || ',';
vc_SQL := vc_SQL || ' No';
vc_SQL := vc_SQL || ' )';
vc_SQL := vc_SQL || ' SELECT';
vc_SQL := vc_SQL || ' 補償区分,';
vc_SQL := vc_SQL || ' CEP区分,'; -- ←この部分で発生しております。
vc_SQL := vc_SQL || ' COLLECT.SQE_売上CHK' || vc_ClientNo_IN || '.Nextval';
vc_SQL := vc_SQL || ' FROM COLLECT.売上明細WK_CHECK';
vc_SQL := vc_SQL || ' WHERE 日次処理日 = ' ||' TO_DATE(''' || vc_Date_IN || ''',''yyyy/mm/dd'')';
vc_SQL := vc_SQL || ' AND 支店コード = ' || nm_ShitenCD_IN;
dbms_output.put_line(vc_SQL);
end;
/

結果(既にpchanさんから指摘されているところが問題ですね)
INSERT INTO COLLECT.WORK売上明細WK_TODAY%%vc_ClientNo%% (補償区分,'CEP区分', No ) SELECT 補償区分, CEP区分,COLLECT.SQE_売上CHK%%vc_ClientNo%%.Nextval FROM COLLECT.売上明細WK_CHECK WHERE 日次処理日 = TO_DATE('2007/02/22','yyyy/mm/dd') AND 支店コード = 99999

Nori0825

投稿数: 18
登録日時: 07/02/22


自己レスです:動的SQL実行時に「ORA-01747: user.table.column、table.columnまたは列指定が無効です。」
投稿時刻: 2007/02/22 17:49   Nori0825 さんへの返信です。 Nori0825 さんへの返信です。
  このスレッドに返信します… 返信

皆様の貴重なご意見を参考に解決する事ができました。

結論として、11行目でSEQUENCEをPG内で設定しておりますが
そのSEQUENCEの権限が付与されておりませんでした。
ヒントを与えていただいた皆様へ多大な感謝の気持ちでいっぱいです。
今後とも、精進してまいりますので、よろしくお願いいたします。

ushitaki

投稿数: 7,079
登録日時: 98/10/30


Re: 動的SQL実行時に「ORA-01747: user.table.column、table.columnまたは列指定が無効です。」
投稿時刻: 2007/02/22 17:51   ushitaki さんへの返信です。 ushitaki さんへの返信です。
  このスレッドに返信します… 返信

Error Message examples.

SQL> insert into scott.emp(empno,"aaa,",ename) values (1,'test','test');
insert into scott.emp(empno,"aaa,",ename) values (1,'test','test')
*
行1でエラーが発生しました。:
ORA-00904: "aaa,": 無効な識別子です。


SQL> insert into scott.emp(empno,"aaa",ename) values (1,'test','test');
insert into scott.emp(empno,"aaa",ename) values (1,'test','test')
*
行1でエラーが発生しました。:
ORA-00904: "aaa": 無効な識別子です。


SQL> insert into scott.emp(empno,'aaa',ename) values (1,'test','test');
insert into scott.emp(empno,'aaa',ename) values (1,'test','test')
*
行1でエラーが発生しました。:
ORA-01747: user.table.column、table.columnまたは列指定が無効です。

茶太郎

投稿数: 11,812
登録日時: 99/03/15


Re: 自己レスです:動的SQL実行時に「ORA-01747: user.table.column、table.columnまたは列指定が無効です。」
投稿時刻: 2007/02/22 21:58   Nori0825 さんへの返信です。 Nori0825 さんへの返信です。
  このスレッドに返信します… 返信

> 結論として、11行目でSEQUENCEをPG内で設定しておりますが
> そのSEQUENCEの権限が付与されておりませんでした。

sequenceをPG内で作成しているのですか?
接続スキーマ内なら権限は不要な気も。
ところでPG内でsequenceを作成している理由が気になりますが。

deanna

投稿数: 3,796
登録日時: 97/05/10


Re: 自己レスです:動的SQL実行時に「ORA-01747: user.table.column、table.columnまたは列指定が無効です。」
投稿時刻: 2007/02/22 22:03   茶太郎 さんへの返信です。 茶太郎 さんへの返信です。
  このスレッドに返信します… 返信

> > 結論として、11行目でSEQUENCEをPG内で設定しておりますが
> > そのSEQUENCEの権限が付与されておりませんでした。
>
> sequenceをPG内で作成しているのですか?
> 接続スキーマ内なら権限は不要な気も。
> ところでPG内でsequenceを作成している理由が気になりますが。

元発言を読めば。

茶太郎

投稿数: 11,812
登録日時: 99/03/15


Re: 自己レスです:動的SQL実行時に「ORA-01747: user.table.column、table.columnまたは列指定が無効です。」
投稿時刻: 2007/02/22 22:08   deanna さんへの返信です。 deanna さんへの返信です。
  このスレッドに返信します… 返信

> 元発言を読めば。

それはどれのこと?






ウェブサイトのご使用条件 | 個人情報保護基本方針/情報保護基本方針