プロが教えるわが家の防犯対策術!

VB2010を使っています。
Oracleのプロシージャを呼び出しするのですが、
以下のエラーが出て困っています。

ORA-06550:行1、列7:
PLS-00801:内部エラー[22503]
ORA-06550:行1、列7:
PL/SQL:Statement ignored

実際のPG

Public Function ORA_EXECUTE(ByVal strSQL As String) As Boolean
' データ格納領域の初期化
Dim v_return_flg As Boolean
Dim Ora_Cnn_bk As OracleConnection
Dim Ora_Cmd_bk As OracleCommand


' Oracle接続情報の初期化
Ora_Cnn_bk = New OracleConnection
Ora_Cmd_bk = New OracleCommand
' Oracleへのコネクションの確立
Ora_Cnn_bk.ConnectionString = "User Id=(ユーザ名); Password=(パスワード); Data Source=(接続文字列)" & "; Pooling=false"

Ora_Cnn_bk.Open()

v_return_flg = False
Try
Dim oTYPE_CHAR As OracleDbType = OracleDbType.Char
Dim oPARM_OUTPUT = ParameterDirection.Output

'バインド変数のセット
Ora_Cmd_bk.Parameters.Add("AAA", oTYPE_CHAR)
Ora_Cmd_bk.Parameters("AAA").Value = " "
Ora_Cmd_bk.Parameters("AAA").Direction = oPARM_OUTPUT
Ora_Cmd_bk.Parameters("AAA").OracleDbType = oTYPE_CHAR

'ストアドプロシージャ実行
Ora_Cmd_bk.CommandType = CommandType.StoredProcedure
Ora_Cmd_bk.CommandText = strSQL
Ora_Cmd_bk.Connection = Ora_Cnn_bk
Ora_Cmd_bk.ExecuteNonQuery()
Catch ex As Exception
MessageBox.Show("SQL(" + strSQL + ")" + Chr(13) + ex.Message, "確認", MessageBoxButtons.OK)
Finally
' コネクションを閉じる
Ora_Cnn_bk.Close()
' Oracle接続情報のクリア
Ora_Cnn_bk = Nothing
Ora_Cmd_bk = Nothing
End Try
' データ返却
Return v_return_flg
End Function

Oracle側のプロシージャは、別PGで使用していて
C++からアクセスし使える状態です。

お分かりになる方教えてください。
m(_ _)m

A 回答 (1件)

http://www.atmarkit.co.jp/bbs/phpBB/viewtopic.ph …

もしこのような状況で、プロシージャ名が全角であることが起因し、プロシージャ名の
変更が行えないなら、別プロシージャを作成してラップすればいいと思います。

また、こちらのように、プロシージャ名にパラメータまで設定しているなら外してください。
http://otn.oracle.co.jp/forum/message.jspa?messa …

この回答への補足

早くに回答ありがとうございます!

おっしゃるとおりに
 ・パラメータ指定
をしておりました。

プロシージャ名は、半角文字を使用しておりますので、
前者にはあたりませんが、
後者のパラメータ指定は、私の勉強不足にところになります。

今、パラメータを別情報で取り込みするようにして、
試している途中でいます。

まだ、正しく動作まで至っていませんが、
なんとかこぎつけたいと思います。

現時点では、
 パラメータを1つ追加
 パラメータ情報をどこかに格納(未だわかっていなくて・・・)
を考えています。

動作出来次第でご報告したく思います。

糸口がわかり助かりました。
本当にありがとうございます。

補足日時:2014/09/26 15:04
    • good
    • 0
この回答へのお礼

パラメータ指定し、設定後実行したら正常動作致しました。

Public Function ORA_EXECUTE(ByVal IN_PROCEDURE As String, ByVal IN_CKAINCD As String, ByVal IN_VRIREKIKBN As String, ByVal IN_VFUNCNM As String) As Boolean
' データ格納領域の初期化
Dim v_return_flg As Boolean
Dim Ora_Cnn_bk As OracleConnection
Dim Ora_Cmd_bk As OracleCommand


' Oracle接続情報の初期化
Ora_Cnn_bk = New OracleConnection
Ora_Cmd_bk = New OracleCommand
' Oracleへのコネクションの確立
Ora_Cnn_bk.ConnectionString = "User Id=AAMAIN; Password=AAMAIN3; Data Source=AAORCL" & "; Pooling=false"

Ora_Cnn_bk.Open()

v_return_flg = False
Try
Dim oPARM_INPUT = ParameterDirection.Input
Dim oTYPE_CHAR As OracleDbType = OracleDbType.Char

'バインド変数のセット
Ora_Cmd_bk.Parameters.Add("P_CKAINCD", oTYPE_CHAR)
Ora_Cmd_bk.Parameters("P_CKAINCD").Value = IN_CKAINCD
Ora_Cmd_bk.Parameters("P_CKAINCD").Direction = oPARM_INPUT
Ora_Cmd_bk.Parameters("P_CKAINCD").OracleDbType = oTYPE_CHAR

Ora_Cmd_bk.Parameters.Add("P_VRIREKIKBN", oTYPE_CHAR)
Ora_Cmd_bk.Parameters("P_VRIREKIKBN").Value = IN_VRIREKIKBN
Ora_Cmd_bk.Parameters("P_VRIREKIKBN").Direction = oPARM_INPUT
Ora_Cmd_bk.Parameters("P_VRIREKIKBN").OracleDbType = oTYPE_CHAR

Ora_Cmd_bk.Parameters.Add("P_VFUNCNM", oTYPE_CHAR)
Ora_Cmd_bk.Parameters("P_VFUNCNM").Value = IN_VFUNCNM
Ora_Cmd_bk.Parameters("P_VFUNCNM").Direction = oPARM_INPUT
Ora_Cmd_bk.Parameters("P_VFUNCNM").OracleDbType = oTYPE_CHAR

'ストアドプロシージャ実行
Ora_Cmd_bk.CommandType = CommandType.StoredProcedure
Ora_Cmd_bk.CommandText = IN_PROCEDURE
Ora_Cmd_bk.Connection = Ora_Cnn_bk
Ora_Cmd_bk.ExecuteNonQuery()
v_return_flg = True
Catch ex As Exception
MessageBox.Show("PROCEDURE(" + IN_PROCEDURE + "('" & IN_CKAINCD & "','" & IN_VRIREKIKBN & "','" & IN_VFUNCNM & "'))" + Chr(13) + ex.Message, "確認", MessageBoxButtons.OK)
Finally
' コネクションを閉じる
Ora_Cnn_bk.Close()
' Oracle接続情報のクリア
Ora_Cnn_bk = Nothing
Ora_Cmd_bk = Nothing
End Try
' データ返却
Return v_return_flg
End Function

本当にありがとうございます。
勉強不足を痛感致しました。

精進したく思います。

数日苦労してた点が解消できてほんとうれしいです。

お礼日時:2014/09/26 15:17

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!