[seasar-dotnet:2428] Re: プライマリキーのないテーブルについて

志水正幸 [E-MAIL ADDRESS DELETED]
2015年 2月 19日 (木) 16:22:07 JST


志水です。
超お世話になっております。

久保さん、こんにちは。


この間こちらでエラーになると言っていたRirekiの外だしSQLなのですが
この間は本当の偶然が重なって実行できたようです。
頭が冷静でなくちょっとおかしかったので、あのときは良くわかっていませんで 
したが
今回また同じ事象になって試してみたら実行できた原因らしきものがわかりました。

1.sql2entity.batの実行ですが以下が原因と思われる点がわかりました。
  ※ハイフン付けてsql2entity.batを実行したときのエラーとなったログも貼 
り付けておきます。

外だしSQLの最初の行に下記のように
外だしSQL名を記述していますが
-- #Rireki#

     ↓

#Rireki#

前に付けているハイフンが有るとsql2entity.batの実行エラーになることがわか 
りました。

2.本来アプリケーションで実行する際には、頭の「 --」が必要なようで
無いままアプリケーションでInsertを実行すると下記の外だしSQLが見つからな 
いエラーなります。
***************************************************
The outsideSql was Not Found!

[Advice]
Please confirm the existence of your target file of outsideSql on your 
classpath.
And please confirm the file name and the file path STRICTLY!

[Specified OutsideSql Path]
EigyoSien.DBFlute.ExBhv.TrRirekiBhv_insertRireki.sql
* * * * * * * * * */
****************************************************

そこで、外だしSQLに「--」を付けて保存して
アプリケーションを実行するとInsertが成功しました。

とりあえず、原因らしきものと対処方法がわかったので
報告しておきます。


以上


*********************************************************************************************
【ハイフン付けて実行エラーになった際のログ】
2015-02-19 15:08:56,721 [main] INFO  (DfSqlFileFireMan#fire():65) - 
...Firing: TrRirekiBhv_insertRireki.sql
2015-02-19 15:08:56,721 [main] INFO 
(DfOutsideSqlAnalyzer#traceSql():314) - SQL:
-- #Rireki#

-- !df:pmb!
-- !!String add_dt!!
-- !!String add_tm!!
-- !!String add_id!!
-- !!String prg_id!!
-- !!String syori_kbn!!
-- !!String den_no!!
-- !!String jyoukyo_kbn_bf!!
-- !!String jyoukyo_kbn_af!!

INSERT INTO TR_RIREKI (ADD_DT, ADD_TM, ADD_ID, PRG_ID, SYORI_KBN, 
DEN_NO, JYOUKYO_KBN_BF, JYOUKYO_KBN_AF) VALUES 
(/*pmb.Add_dt*/'20150214', /*pmb.Add_tm*/'1208', /*pmb.Add_id*/'0004', 
/*pmb.Prg_id*/'0001', /*pmb.Syori_kbn*/'1', /*pmb.Den_no*/'00000000001', 
/*pmb.Jyoukyo_kbn_bf*/'999', /*pmb.Jyoukyo_kbn_af*/'888')
2015-02-19 15:08:56,737 [main] ERROR 
(DfDBFluteTaskUtil#logException():161) - Look! Read the message below.
/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
Failed to execute DBFlute Task 'Sql2Entity'.

[Advice]
Check the exception messages and the stack traces.

[Database Product]
Oracle Oracle Database 11g Release 11.2.0.1.0 - 64bit Production

[JDBC Driver]
Oracle JDBC driver 11.1.0.7.0-Production for JDBC 11.1
* * * * * * * * * */
org.seasar.dbflute.exception.SQLFailureException: Look! Read the message 
below.
/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
Failed to execute the SQL!

[SQL File]
..\source\EigyoSien\DBFlute\ExBhv\TrRirekiBhv_insertRireki.sql

[Executed SQL]
-- #Rireki#

-- !df:pmb!
-- !!String add_dt!!
-- !!String add_tm!!
-- !!String add_id!!
-- !!String prg_id!!
-- !!String syori_kbn!!
-- !!String den_no!!
-- !!String jyoukyo_kbn_bf!!
-- !!String jyoukyo_kbn_af!!

INSERT INTO TR_RIREKI (ADD_DT, ADD_TM, ADD_ID, PRG_ID, SYORI_KBN, 
DEN_NO, JYOUKYO_KBN_BF, JYOUKYO_KBN_AF) VALUES 
(/*pmb.Add_dt*/'20150214', /*pmb.Add_tm*/'1208', /*pmb.Add_id*/'0004', 
/*pmb.Prg_id*/'0001', /*pmb.Syori_kbn*/'1', /*pmb.Den_no*/'00000000001', 
/*pmb.Jyoukyo_kbn_bf*/'999', /*pmb.Jyoukyo_kbn_af*/'888')

[SQLState]
42000

[ErrorCode]
900

[SQLException]
java.sql.SQLSyntaxErrorException
ORA-00900: SQL文が無効です。
* * * * * * * * * */
     at 
org.seasar.dbflute.helper.jdbc.sqlfile.DfSqlFileRunnerBase.throwSQLFailureException(DfSqlFileRunnerBase.java:588)
     at 
org.seasar.dbflute.logic.sql2entity.analyzer.DfOutsideSqlAnalyzer.execSQL(DfOutsideSqlAnalyzer.java:144)
     at 
org.seasar.dbflute.helper.jdbc.sqlfile.DfSqlFileRunnerBase.runTransaction(DfSqlFileRunnerBase.java:121)
     at 
org.seasar.dbflute.helper.jdbc.sqlfile.DfSqlFileFireMan.processSqlFile(DfSqlFileFireMan.java:172)
     at 
org.seasar.dbflute.helper.jdbc.sqlfile.DfSqlFileFireMan.fire(DfSqlFileFireMan.java:68)
     at 
org.seasar.dbflute.task.DfSql2EntityTask.doExecute(DfSql2EntityTask.java:144)
     at 
org.seasar.dbflute.task.bs.DfAbstractTexenTask$1.callActualExecute(DfAbstractTexenTask.java:131)
     at 
org.seasar.dbflute.task.bs.assistant.DfTaskBasicController.doExecute(DfTaskBasicController.java:184)
     at 
org.seasar.dbflute.task.bs.assistant.DfTaskBasicController.execute(DfTaskBasicController.java:77)
     at 
org.seasar.dbflute.task.bs.DfAbstractTexenTask.execute(DfAbstractTexenTask.java:153)
     at org.apache.tools.ant.UnknownElement.execute(UnknownElement.java:288)
     at sun.reflect.GeneratedMethodAccessor3.invoke(Unknown Source)
     at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
     at java.lang.reflect.Method.invoke(Unknown Source)
     at 
org.apache.tools.ant.dispatch.DispatchUtils.execute(DispatchUtils.java:105)
     at org.apache.tools.ant.Task.perform(Task.java:348)
     at org.apache.tools.ant.Target.execute(Target.java:357)
     at org.apache.tools.ant.Target.performTasks(Target.java:385)
     at org.apache.tools.ant.Project.executeSortedTargets(Project.java:1329)
     at org.apache.tools.ant.Project.executeTarget(Project.java:1298)
     at 
org.apache.tools.ant.helper.DefaultExecutor.executeTargets(DefaultExecutor.java:41)
     at org.apache.tools.ant.Project.executeTargets(Project.java:1181)
     at org.apache.tools.ant.Main.runBuild(Main.java:698)
     at org.apache.tools.ant.Main.startAnt(Main.java:199)
     at org.apache.tools.ant.launch.Launcher.run(Launcher.java:257)
     at org.apache.tools.ant.launch.Launcher.main(Launcher.java:104)
Caused by: java.sql.SQLSyntaxErrorException: ORA-00900: SQL文が無効です。

     at 
oracle.jdbc.driver.SQLStateMapping.newSQLException(SQLStateMapping.java:91)
     at 
oracle.jdbc.driver.DatabaseError.newSQLException(DatabaseError.java:133)
     at 
oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:206)
     at oracle.jdbc.driver.T4CTTIoer.processError(T4CTTIoer.java:455)
     at oracle.jdbc.driver.T4CTTIoer.processError(T4CTTIoer.java:406)
     at oracle.jdbc.driver.T4CTTIoer.processError(T4CTTIoer.java:399)
     at oracle.jdbc.driver.T4C8Odscrarr.receive(T4C8Odscrarr.java:205)
     at oracle.jdbc.driver.T4CStatement.doDescribe(T4CStatement.java:717)
     at 
oracle.jdbc.driver.OracleStatement.describe(OracleStatement.java:3546)
     at 
oracle.jdbc.driver.OracleResultSetMetaData.<init>(OracleResultSetMetaData.java:55)
     at 
oracle.jdbc.driver.OracleResultSetImpl.getMetaData(OracleResultSetImpl.java:143)
     at 
org.seasar.dbflute.logic.sql2entity.cmentity.DfCustomizeEntityMetaExtractor.extractColumnMetaInfoMap(DfCustomizeEntityMetaExtractor.java:46)
     at 
org.seasar.dbflute.logic.sql2entity.analyzer.DfOutsideSqlAnalyzer.extractColumnMetaInfoMap(DfOutsideSqlAnalyzer.java:178)
     at 
org.seasar.dbflute.logic.sql2entity.analyzer.DfOutsideSqlAnalyzer.execSQL(DfOutsideSqlAnalyzer.java:125)
     ... 24 more


> 志 水です。
> 超お世話になっております。
>
> 久保さん、こんにちは。
>
> 未サポートでしたか。了解です。
> もともと現項目の日付と時間(時分秒)がPKだったんですけどね。
> 全画面の保存時にInsertするテーブルなので、絶対に一意制約違反が頻発する 
> と 思うし
> どうせ禄に活用もしない履歴テーブルだろうし
> PK用のシーケンス作ったりするのも面倒だと思ってPKはずさせたんですけど
> こんなに時間とるとは横着しちゃダメですね。
>
> ツールには外だしSQLを全コピーしたものでしたので
> #Rireki# の行からまるごと含めて動いてました。
>
> だから私も原因が突き止められず余計に戸惑ってしまったのかもしれません。
> というのは、
> こちらの事情で時間もないということで、すぐに原因がわからない場合も考えて
> 設計にシーケンスのPKを追加する方向で話を進めていたんです。
> そのために一旦、外だしSQLファイルをプロジェクトから削除していたのですが、
> 何故か、ファイルを完全削除してしまっていたみたいで(頭おかしい・・・)
> 今回、詳細なログが必要ということだったので
> もう一度、メールに貼り付けてあったSQL内容で外だしSQLファイルを再作成して
> エラーを出そうとしたらsql2entity.batの実行が成功しpmbファイルも作成さ 
> れ ていました。
>
> 本当の原因が特定できずに気持ち悪いですが
> まず断言できるは100%こちらの作成ミスです。
>
> 久保さんにはお手数を取らせてしまって申し訳ありませんでした。
> また不明点とかあれば教示願うと思うので
> 懲りずに相談にのってください。
>
>
> 以上、有難うございました。
>
>
>> 久保(jflute)です
>>
>> 志水さん、こんばんは
>>
>> 申し訳ないですが、.NETの方だとその機能はサポートしてないですね…
>> まあ念のために月並みですが、履歴とかでもPKを付けることはオススメします。
>>
>> 外だしSQLならできないことはないはずですが、
>> ネストした例外とかにもうちょい詳しい情報出てたりしませんかね?
>> あと、SQLツールだと動いているというのは、
>> -- #Rireki# の行からまるごと含めて動いてるってことでしょうか?
>>
>>
>> 2015-02-14 13:29 GMT+09:00 志水正幸 <ie2m-smz @ asahi-net.or.jp>:
>>> 志水です。
>>> 超お世話になっております。
>>>
>>> どうやってもInsertメソッドがでてこないので
>>> Insertの外だしSQLを作成したのですが
>>> sql2entity.batを実行すると下記のエラーとなります。
>>> SQL文はツールで実行すると正常に実行されることを確認しています。
>>>
>>> 何かお気づきのことがありましたら
>>> ご教示お願いします。
>>>
>>>
>>> 2015-02-14 13:18:49,974 [main] INFO (DfSqlFileFireMan#fire():65) -
>>> ...Firing: TrRirekiBhv_insertRireki.sql
>>> 2015-02-14 13:18:49,974 [main] INFO 
>>> (DfOutsideSqlAnalyzer#traceSql():314) -
>>> SQL:
>>> -- #Rireki#
>>>
>>> -- !df:pmb!
>>> -- !!String add_dt!!
>>> -- !!String add_tm!!
>>> -- !!String add_id!!
>>> -- !!String prg_id!!
>>> -- !!String syori_kbn!!
>>> -- !!String den_no!!
>>> -- !!String jyoukyo_kbn_bf!!
>>> -- !!String jyoukyo_kbn_af!!
>>>
>>> INSERT INTO TR_RIREKI (ADD_DT, ADD_TM, ADD_ID, PRG_ID, SYORI_KBN, 
>>> DEN_NO,
>>> JYOUKYO_KBN_BF, JYOUKYO_KBN_AF)
>>> VALUES (/*pmb.Add_dt*/'20150214', /*pmb.Add_tm*/'1208',
>>> /*pmb.Add_id*/'0004', /*pmb.Prg_id*/'0001', /*pmb.Syori_kbn*/'1',
>>>   /*pmb.Den_no*/'00000000001', /*pmb.Jyoukyo_kbn_bf*/'999',
>>> /*pmb.Jyoukyo_kbn_af*/'888')
>>> 2015-02-14 13:18:49,990 [main] ERROR 
>>> (DfDBFluteTaskUtil#logException():161)
>>> - Look! Read the message below.
>>> /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
>>> Failed to execute DBFlute Task 'Sql2Entity'.
>>>
>>> [Advice]
>>> Check the exception messages and the stack traces.
>>>
>>> [Database Product]
>>> Oracle Oracle Database 11g Release 11.2.0.1.0 - 64bit Production
>>>
>>> [JDBC Driver]
>>> Oracle JDBC driver 11.1.0.7.0-Production for JDBC 11.1
>>> * * * * * * * * * */
>>> org.seasar.dbflute.exception.SQLFailureException: Look! Read the 
>>> message
>>> below.
>>> /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
>>> Failed to execute the SQL!
>>>
>>> [SQL File]
>>> ..\source\EigyoSien\DBFlute\ExBhv\TrRirekiBhv_insertRireki.sql
>>>
>>> [Executed SQL]
>>> -- #Rireki#
>>>
>>> -- !df:pmb!
>>> -- !!String add_dt!!
>>> -- !!String add_tm!!
>>> -- !!String add_id!!
>>> -- !!String prg_id!!
>>> -- !!String syori_kbn!!
>>> -- !!String den_no!!
>>> -- !!String jyoukyo_kbn_bf!!
>>> -- !!String jyoukyo_kbn_af!!
>>>
>>> INSERT INTO TR_RIREKI (ADD_DT, ADD_TM, ADD_ID, PRG_ID, SYORI_KBN, 
>>> DEN_NO,
>>> JYOUKYO_KBN_BF, JYOUKYO_KBN_AF)
>>> VALUES (/*pmb.Add_dt*/'20150214', /*pmb.Add_tm*/'1208',
>>> /*pmb.Add_id*/'0004', /*pmb.Prg_id*/'0001', /*pmb.Syori_kbn*/'1',
>>>   /*pmb.Den_no*/'00000000001', /*pmb.Jyoukyo_kbn_bf*/'999',
>>> /*pmb.Jyoukyo_kbn_af*/'888')
>>>
>>> [SQLState]
>>> 42000
>>>
>>> [ErrorCode]
>>> 900
>>>
>>> [SQLException]
>>> java.sql.SQLSyntaxErrorException
>>> ORA-00900: SQL文が無効です。
>>> * * * * * * * * * */
>>>
>>>
>>>
>>>
>>>
>>>> 志 水です。
>>>>
>>>> 超お世話になっております。
>>>>
>>>> たびたびすみません。
>>>> 教えてください。
>>>>
>>>> 環境:ASP.NET
>>>>        dbflute-0.8.9.56
>>>>
>>>> プライマリキーのない
>>>> 履歴テーブルという、いろいろな更新等を記録する
>>>> 意味があるのかよくわからないテーブルがありまして
>>>> これにInsertをしたいのですがBehaviorにInsertメソッドが作成されませ 
>>>> んで した。
>>>>
>>>> なんでかと思いマニュアルを読むと「littleAdjustmentMap.dfprop」の
>>>> 「isAvailableNonPrimaryKeyWritable」をTRUEにすれば良いとわかったので
>>>> 実行してみたのですが、やっぱりBehaviorにinsertメソッドが追加されて 
>>>> いま せんでした。
>>>>
>>>> Example も見たのですがJavaだったので環境もなくテキストで開いてコー 
>>>> ドを 読んだのですが
>>>> それらしいとこはAssertのところでJUnit(だったかな?)は良く知らない 
>>>> の でわかりませんでしたorz
>>>>
>>>> もしかして、.NETでは未サポートなんでしょうか?
>>>> この場合、どのようにInsertを実行すればよいのでしょうか?
>>>> (なにか.NETのサンプルがあればうれしいのですが、どこかにないですか?)
>>>>
>>>>
>>>> 以上、ご教示お願いします。
>>>>
>>>>
>>>> ---
>>>> このEメールはアバスト アンチウイルスによりウイルススキャンされてい 
>>>> ます。
>>>> http://www.avast.com
>>>>
>>>> _______________________________________________
>>>> seasar-dotnet mailing list
>>>> seasar-dotnet @ ml.seasar.org
>>>> https://ml.seasar.org/mailman/listinfo/seasar-dotnet
>>>>
>>>
>>> ---
>>> このEメールはアバスト アンチウイルスによりウイルススキャンされていま 
>>> す。
>>> http://www.avast.com
>>>
>>> _______________________________________________
>>> seasar-dotnet mailing list
>>> seasar-dotnet @ ml.seasar.org
>>> https://ml.seasar.org/mailman/listinfo/seasar-dotnet
>> _______________________________________________
>> seasar-dotnet mailing list
>> seasar-dotnet @ ml.seasar.org
>> https://ml.seasar.org/mailman/listinfo/seasar-dotnet
>>
>
>
> ---
> このEメールはアバスト アンチウイルスによりウイルススキャンされています。
> http://www.avast.com
>
> _______________________________________________
> seasar-dotnet mailing list
> seasar-dotnet @ ml.seasar.org
> https://ml.seasar.org/mailman/listinfo/seasar-dotnet
>


---
このEメールはアバスト アンチウイルスによりウイルススキャンされています。
http://www.avast.com



seasar-dotnet メーリングリストの案内