SQLについて教えてください。
お世話になります。
ORACLE SQLについて質問させて下さい。
ACCESS2003より以下のようなSQLを発行しています。
SELECT A.商品CD, A.区分, SUM(A.数量) AS 受数量, SUM(A.金額) AS 受金額
FROM テーブル1 A INNER JOIN テーブル2 B ON SUBSTR(A.商品CD,1,13) = B.商品コード
WHERE A.年 = 2008 AND A.月 = 03 AND B.区分 = '51'
GROUP BY CUBE(A.商品CD, A.区分)
ORDER BY A.商品CD, A.区分
集計のSQLです。
SQLは正しいと思うのですが、実行結果が返ってきません。0件です。
調べていたところ、SQLを発行した後のレコードカウントに
「実行時エラー '-2147467259' データプロバイダまたはほかのサービスがE_FAIL状態を返しました。」
とあり、件数が0件(SQL自体動いていない?)でした。
SQL自体は開発ツールとして使用している、「オブジェクトブラウザ」のSQL発行機能にて実際に動かしてデータも正しく抽出されることは確認してるいるのですが。。
他にネットで調査したところ、抽出件数が多すぎると上記のようなエラーが起こる?みたいな事も書いてありました。
しかし、結果の件数はそんなに多くはないのです。(200レコードくらい。)
なぜ起こるか、どうすればいいか、が良く分かりません。。。
解決策、回避策がありましたら教えていただきたいと思います。
SQLを発行するサブルーチンも記載しておきます。
↓↓↓
Public Function cmn_DoSelectSql(ByVal pstrSql As String, pstrData() As String) As Long
Dim lngErrNum As Long 'エラー値
Dim strErrMsg As String 'エラーメッセージ
Dim adoRs As ADODB.Recordset 'レコードセット
Dim lngColCnt As Long '最大レコード数
Dim lngRowCnt As Long '最大フィールド数
Dim objField() As Object
Dim lngCol As Long 'レコードカウントアップ用
Dim lngRow As Long 'フィールドカウントアップ用
On Error Resume Next
cmn_DoSelectSql = 0
'変数初期化
g_lngOraRecCnt = 0
'パラメータチェック
If pstrSql = "" Then
Call cmn_ErrMsgDsp("-", "パラメータ異常が発生しました。")
cmn_DoSelectSql = -9
Exit Function
End If
If (g_adoCon Is Nothing) Then
Call cmn_ErrMsgDsp("-", "パラメータ異常が発生しました。")
cmn_DoSelectSql = -9
Exit Function
End If
Set adoRs = New ADODB.Recordset
adoRs.CursorLocation = adUseClient
'SQL実行
adoRs.Open pstrSql, g_adoCon, adOpenStatic, , adCmdText
'エラーセット
lngErrNum = Err
strErrMsg = Error(Err)
'エラーメッセージ表示
If (lngErrNum <> 0) Then
Select Case lngErrNum
'排他エラー
Case 54: cmn_DoSelectSql = -2
'その他
Case Else
Call cmn_ErrMsgDsp(lngErrNum, strErrMsg)
cmn_DoSelectSql = -1
End Select
GoTo sub_Exit
End If
'列数セット
lngColCnt = adoRs.Fields.Count
If adoRs.RecordCount > 0 Then ←ココに上記エラーメッセージが入ってきます。。。
g_lngOraRecCnt = adoRs.RecordCount
lngRowCnt = adoRs.RecordCount
'受渡用変数初期化
ReDim pstrData(1 To lngRowCnt, 1 To lngColCnt)
Erase objField
ReDim objField(0 To lngColCnt - 1)
For lngCol = 0 To lngColCnt - 1
Set objField(lngCol) = adoRs.Fields(lngCol)
Next lngCol
'受渡用変数セット
For lngRow = 0 To (lngRowCnt - 1)
For lngCol = 0 To (lngColCnt - 1)
pstrData(lngRow + 1, lngCol + 1) = Cmn_NullToSpace(objField(lngCol).Value)
Next lngCol
adoRs.MoveNext
Next lngRow
End If
sub_Exit:
If (Not adoRs Is Nothing) Then
adoRs.Close
Set adoRs = Nothing
End If
End Function
自分で開発したものではないのですが、コレといって間違いはないように思えます。。
もし何かありましたらアドバイス等お願い致します。
・・・集計SQLは実行できないのでしょうか。。
お礼
Oracle SQL Developerは使用したことがないので、試してみます。 返信ありがとうございました。