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

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

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

Oracle DatabaseはRDBMSの商品です。具体的な発売商品として知られているのが、 Oracle9i、Oracle10g、Oracle 11gとOracle 12cです。

Q&A

1回答

1031閲覧

今まで稼働していたアップロードPrgが無限ループ

maesan

総合スコア10

Oracle Database 10g

Oracle DatabaseはRDBMSの商品です。具体的な発売商品として知られているのが、 Oracle9i、Oracle10g、Oracle 11gとOracle 12cです。

0グッド

0クリップ

投稿2019/01/12 08:05

前提・実現したいこと

PowerBuilderで開発されたモジュールをWindowsタスクスケジュールにて実行運用。
2012より2018まで問題なく運用。
2018年末にエラー発生が発覚し、現在調査中。
ハンディターミナル(H/T)よりPCにて取り込んだデータをPC上のSQLserverに
蓄積している。(こちらはNoError)
別システムにて、WinServer2008上のPowerBuilderモジュールにてPC上のSQLserver
のデータを読込み、Oracle10GXeへ取り込む。
Oracle10GXeのワークテーブルへのアップデート時にエラーが発生していると推察。
前任者より引き継いだが、設計資料等無く、いろいろ試したが未だ解決せず。

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

ハンド実行すると下記エラーがポップアップ表示されて終了。 「 PowerBuilder アプリケーションの実行エラー(R0002)  アプリケーションは中断しました。  エラー; Null オブジェクトの参照が行われました。イベント Clicked の 179行目  (w_hdata_upload のオブジェクト cd_retrieve) 」 実運用ではWindowsタスクスケジュールにてバッチ起動。実行中のままフリーズ状態。

該当のソースコード

PowerBuilder

1//////////////////////////////////////// 2// 照合用データベース接続 3//////////////////////////////////////// 4SQLSHP = CREATE Transaction 5 DISCONNECT USING SQLSHP; 6 7SQLSHP.DBMS = "ODBC" 8SQLSHP.AutoCommit = False 9SQLSHP.DBParm = "ConnectString='DSN=SHP_DATA;UID=SHPUSR;PWD=SHPPASS',CommitOnDisconnect='No'" 10CONNECT USING SQLSHP; 11IF SQLSHP.SQLCode = -1 THEN 12 // 南館PCG繋がっていないため処理しない 13 RETURN 14END IF 15//////////////////////////////////////// 16// オラクルDB接続 17//////////////////////////////////////// 18DISCONNECT USING SQLCA; 19// Profile sv03_mr 20SQLCA.DBMS = "O10 Oracle10g (10.1.0)" 21SQLCA.LogPass ="mr" 22SQLCA.ServerName = "sv03" 23SQLCA.LogId = "mr" 24SQLCA.AutoCommit = False 25SQLCA.DBParm = "CommitOnDisconnect='No',PBCatalogOwner='mr'" 26 27CONNECT USING SQLCA; 28 29IF SQLCA.SQLCode = -1 THEN 30 MessageBox("SQL エラー", SQLCA.SQLErrText) 31END IF 32 33//////////////////////////////////////// 34// アクセスのMDB接続(メイラ品番取得用) 35//////////////////////////////////////// 36 SQLMDB = CREATE Transaction 37 38 DISCONNECT USING SQLMDB; 39 40 // Profile meiraitem 41SQLMDB.DBMS = "ODBC" 42SQLMDB.AutoCommit = False 43SQLMDB.DBParm = "ConnectString='DSN=meiraitem;UID=;PWD=;,CommitOnDisconnect='No'" 44 45CONNECT USING SQLMDB; 46 47IF SQLMDB.SQLCode = -1 THEN 48 MessageBox("SQL エラー", SQLMDB.SQLErrText) 49END IF 50 51//////////////////////////////////////// 52// トレーサビリティポストグレスDB 53// メタルワン12桁以上品番対応のためポスグレのデータを見る必要がある。 54//////////////////////////////////////// 55 POSTGRES = CREATE Transaction 56 57 DISCONNECT USING POSTGRES; 58 59 // Profile meiraitem 60POSTGRES.DBMS = "ODBC" 61POSTGRES.AutoCommit = False 62POSTGRES.DBParm = "ConnectString='DSN=sv03_maruichi;UID=maruichi;PWD=maruichi',CommitOnDisconnect='No'" 63 64 // Profile meiraitem 65"ConnectString='DSN=local_postgre_maruichi;UID=maruichi;PWD=maruichi',CommitOnDisconnect='No'" 66// 67CONNECT USING POSTGRES; 68IF POSTGRES.SQLCode = -1 THEN 69 MessageBox("SQL エラー", POSTGRES.SQLErrText) 70END IF 71cb_retrieve.TriggerEvent(Clicked!) 72String ls_sql , ls_14digit_data , ls_base_data , ls_meira_itemno , ls_find , ls_data ,ls_posgre_sql , ls_fitemno , ls_hakkono 73Long ll_fseqno , ll_rows , ll_cnt , ll_cnt2 , ll_ins , ll_ret, ll_find 74DateTime ldt_pre_datetime 75Int li_ret 76ds_base lds_meraitem_to , lds_meiraitem_from , lds_upload_hst , lds_SHP_DATA , lds_work_table , lds_shp_data_list 77 78//hpb_1.MaxPosition = 7 // 1つ増加させた 79 80//************************************* 81// STEP 1. 82// 抽出対象取得 83//************************************* 84// 前回成功した日時 85SELECT 処理開始日時 INTO :ldt_pre_datetime 86FROM アップロード履歴 87WHERE 連番 = (SELECT MAX(連番) 88 FROM アップロード履歴 89 WHERE 実行結果 = 'C') 90; 91 92SELECT NVL(MAX(連番) ,0) INTO :ll_fseqno FROM アップロード履歴; 93 94ll_fseqno++ 95 96// アップロード履歴F更新 97// データストア作成 98lds_upload_hst = CREATE ds_base 99lds_upload_hst.DataObject = "d_upload_hst" 100lds_upload_hst.SetTransObject(SQLCA) 101 102lds_upload_hst.InsertRow(0) 103lds_upload_hst.Object.連番[1] = ll_fseqno 104lds_upload_hst.Object.処理開始日時[1] = DateTime(Today(),Now()) 105lds_upload_hst.Object.実行結果[1] = "E" 106 107IF lds_upload_hst.Update() <> 1 THEN 108 ROLLBACK; 109 CLOSE(Parent) 110 RETURN 111END IF 112 113COMMIT; 114 115// 対象検索 116lds_shp_data_list = CREATE ds_base 117lds_shp_data_list.DataObject = "d_shp_targetlist" 118lds_shp_data_list.SetTransObject(SQLSHP) 119 120// 2014.03.12 Fujita 収集漏れがあったため一週間は遡る 121ldt_pre_datetime = Datetime(RelativeDate(Date(ldt_pre_datetime),-7)) 122 123ls_sql = "" 124ls_sql = "現品票チェック日付 >= " + String(ldt_pre_datetime,"YYYYMMDD") 125ll_rows = lds_shp_data_list.uf_retrieve(ls_sql) 126IF ll_rows = 0 THEN 127 // 対象行がない場合は処理終了 128 lds_upload_hst.uf_retrieve("連番=" + String(ll_fseqno)) 129 lds_upload_hst.Object.処理終了日時[1] = DateTime(Today(),Now()) 130 lds_upload_hst.Object.実行結果[1] = "C" 131 lds_upload_hst.Update() 132 COMMIT; 133 CLOSE(PARENT) 134 RETURN 135ELSEIF ll_rows < 0 THEN 136 // エラー 137 lds_upload_hst.uf_retrieve("連番=" + String(ll_fseqno)) 138 lds_upload_hst.Object.処理終了日時[1] = DateTime(Today(),Now()) 139 lds_upload_hst.Object.実行結果[1] = "E" 140 lds_upload_hst.Object.エラー情報[1] = "STEP1:検索できませんでした SQL:" + ls_sql 141 lds_upload_hst.Update() 142 COMMIT; 143 CLOSE(PARENT) 144 RETURN 145END IF 146 147hpb_1.Position = 1 148 149↓%%%%%%%%%%%%%%該当ワークテーブルへの処理部分%%%%%%%%%%%%%% 150//************************************* 151// STEP 3 152// ワークテーブルへインサート 153//************************************* 154DELETE FROM ワークテーブル; 155IF SQLCA.SQLCode = -1 THEN 156 ROLLBACK; 157 // エラー 158 lds_upload_hst.uf_retrieve("連番=" + String(ll_fseqno)) 159 lds_upload_hst.Object.処理終了日時[1] = DateTime(Today(),Now()) 160 lds_upload_hst.Object.実行結果[1] = "E" 161 lds_upload_hst.Object.エラー情報[1] = "STEP3:" + SQLCA.SQLErrText 162 lds_upload_hst.Update() 163 COMMIT; 164 CLOSE(PARENT) 165 RETURN 166END IF 167 168COMMIT; 169 170lds_work_table = CREATE ds_base 171lds_work_table.DataObject = "d_work_table" 172lds_work_table.SetTransObject(SQLCA) 173 174 175 // 対象検索用 176 lds_SHP_DATA = CREATE ds_base 177 lds_SHP_DATA.DataObject = "d_shp_data" 178 lds_SHP_DATA.SetTransObject(SQLSHP) 179 180 hpb_2.MaxPosition = lds_shp_data_list.RowCount() 181 182 FOR ll_cnt = 1 TO lds_shp_data_list.RowCount() 183 ls_sql = "現品票チェック日付 = '" + lds_shp_data_list.Object.現品票チェック日付[ll_cnt] + "'" 184 ll_ret = lds_SHP_DATA.uf_retrieve(ls_sql) 185 186 lds_SHP_DATA.RowsCopy(1, lds_SHP_DATA.RowCount(), Primary!, lds_work_table, 1, Primary!) 187 IF lds_work_table.Update() < 0 THEN 188 ROLLBACK; 189 // エラー 190 lds_upload_hst.uf_retrieve("連番=" + String(ll_fseqno)) 191 lds_upload_hst.Object.処理終了日時[1] = DateTime(Today(),Now()) 192 lds_upload_hst.Object.実行結果[1] = "E" 193 lds_upload_hst.Object.エラー情報[1] = "STEP3:" + lds_meiraitem_from.is_err 194 lds_upload_hst.Update() 195 COMMIT; 196 CLOSE(PARENT) 197 RETURN 198 END IF 199 COMMIT; 200 201 lds_work_table.Reset() 202 hpb_2.Position = ll_cnt 203NEXT 204 205IF IsValid(lds_work_table) THEN Destroy(lds_work_table) 206hpb_1.Position = 3 207 208//************************************* 209// STEP 4 210// 重複データ削除 211// 差分収集には不安があるためわざと一部重複させてインポート対象としている 212//************************************* 213DELETE 214FROM ワークテーブル 215WHERE EXISTS (SELECT 1 216 FROM 照合生データ 217 WHERE 読取順 = ワークテーブル.読取順); 218 219IF SQLCA.SQLCode = -1 THEN 220 ROLLBACK; 221 // エラー 222 lds_upload_hst.uf_retrieve("連番=" + String(ll_fseqno)) 223 lds_upload_hst.Object.処理終了日時[1] = DateTime(Today(),Now()) 224 lds_upload_hst.Object.実行結果[1] = "E" 225 lds_upload_hst.Object.エラー情報[1] = "STEP4:" + SQLCA.SQLErrText 226 lds_upload_hst.Update() 227 COMMIT; 228 CLOSE(PARENT) 229 RETURN 230END IF 231 232COMMIT; 233 234hpb_1.Position = 4 235 236//************************************* 237// STEP 7 238// ワークファイルの情報を一括して照合生データテーブルへ 239//************************************* 240Insert into 照合生データ 241SELECT 読取順, 242 品番, 243 納入指示数, 244 収容数, 245 出荷数, 246 発行番号, 247 納入指示日, 248 納入場所, 249 供給ライン, 250 納入便, 251 納入指示時刻, 252 背番, 253 HT番号, 254 プログラム区分, 255 現品票チェック日付, 256 現品票チェック時間, 257 KDロットNO, 258 予備1, 259 予備3, 260 エラーコード, 261 備考, 262 SYSDATE 263FROM ワークテーブル; 264 265IF SQLCA.SQLCode = -1 THEN 266 ROLLBACK; 267 // エラー 268 lds_upload_hst.uf_retrieve("連番=" + String(ll_fseqno)) 269 lds_upload_hst.Object.処理終了日時[1] = DateTime(Today(),Now()) 270 lds_upload_hst.Object.実行結果[1] = "E" 271 lds_upload_hst.Object.エラー情報[1] = "STEP6:" + SQLCA.SQLErrText 272 lds_upload_hst.Update() 273 COMMIT; 274 CLOSE(PARENT) 275 RETURN 276END IF 277 278COMMIT; 279 280// 処理正常終了 281lds_upload_hst.uf_retrieve("連番=" + String(ll_fseqno)) 282lds_upload_hst.Object.処理終了日時[1] = DateTime(Today(),Now()) 283lds_upload_hst.Object.実行結果[1] = "C" 284lds_upload_hst.Update() 285COMMIT; 286CLOSE(PARENT)

試したこと

抽出元のSQLserverの該当テーブルに重複データがないか調査→無し
Oracle10gXeなのでデータ上限値に近づいていたのでバックアップの上データ削除
→該当テーブルの圧縮は実行済み(成功)
SQLserver、Oracle10g共に関連テーブルの重複は確認済み

補足情報(FW/ツールのバージョンなど)

ここにより詳細な情報を記載してください。
問題発生直後、SQLserver上の関連マスタに重複データがあったので
管理画面(Access)より削除済み。

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

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

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

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

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

guest

回答1

0

2012より2018まで問題なく運用。

コードは見てませんが、SEQUENCEを使い切ったと予想。

投稿2019/01/12 08:12

hichon

総合スコア5737

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

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

maesan

2019/01/13 23:57

>>SEQUENCEを使い切ったと予想。 回答有り難うございます。 具体的にはどのような対処方法を取れば良いでしょうか?よろしくご教授願います。
hichon

2019/01/14 00:50

予想通りだったと言うことでしょうか? 案1、古いデータをごっそり消してカウンタを巻き戻す。問題の先送りともいう。システムの耐用年数によってはこれが現実的。 案2、対象カラムの桁を増やして上限を上げる。影響範囲の確認が面倒臭い。コードの変更が必要ならご愁傷様。
maesan

2019/01/15 09:33

実施策 1.データテーブルの古いデータをエクスポート退避し、削除。 2.データテーブルのシュリンク実施 3.UNDO表領域の再作成による縮小処理 以上、実施しましたが結果はダメでした。メモリー領域の上限:1Gを 超えていますが、こちらが原因でしょうか? もし原因の可能性があるなら、メモリー領域の縮小は可能なのでしょうか?
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問