- PR -

.NETからストアドプロシージャの引数設定方法

投稿者投稿内容
未記入
会議室デビュー日: 2004/08/22
投稿数: 7
投稿日時: 2004-08-23 16:58
@訂正します。申し訳ありませんでした。
オラクルサーバー(oracle9i)内に以下のストアドを置き
------------------------------------
  誤)CREATE OR REPLACE PROCEDURE "テスト"
→ 正)CREATE OR REPLACE PROCEDURE テスト

(aaa in number,ppp in out varchar2)
is
ppp:='OK';
end;
-----------------------------------

AプログラムのデバッグとしてPL/SQL Developer Ver5も使用し
テストウィンドウにて以下のように
してテストしますと正常に値が返ってきます!

declare
aa number;
bb varchar2(10);
begin
aa:=1;
bb:='NG';
テスト(aa,bb);
end;

OK

不思議なのがテスト(:aa,:bb);とすると
ORA-01008:バインドされていない変数があります。
とエラーメッセージが表示されます
Jitta
ぬし
会議室デビュー日: 2002/07/05
投稿数: 6267
お住まい・勤務地: 兵庫県・海手
投稿日時: 2004-08-23 17:15
引用:

未記入さんの書き込み (2004-08-23 16:58) より:

  誤)CREATE OR REPLACE PROCEDURE "テスト"
→ 正)CREATE OR REPLACE PROCEDURE テスト


 ダブルクォーテーションのあるなしという問題ではなく、“Oracleのオブジェクト名に英数以外の文字を使うべきではない”という問題なんですけど。。。

 「使えている」というのと、「仕様上サポートされており、使える」というのは別の問題です。

『Oracle9i SQL リファレンス』より:
引用:

非引用識別子は、データベース・キャラクタ・セットのアルファベット文字で開始する必要があります。引用識別子の開始文字には、任意の文字を使用できます。

非引用識別子には、データベース・キャラクタ・セットの英数字、アンダースコア(_)、ドル記号($)およびシャープ記号(#)のみ含めることができます。データベース・リンクの名前には、ピリオド(.)とアットマーク(@)を含めることもできます。$ と# はできるだけ使用しないでください。

引用識別子には、すべての文字、句読点および空白を使用できます。ただし、引用識別子と非引用識別子のいずれにも、二重引用符は使用できません。

いーた
大ベテラン
会議室デビュー日: 2004/07/12
投稿数: 154
お住まい・勤務地: 東京
投稿日時: 2004-08-23 17:21
引用:

Dim PV As New OracleClient.OracleParameter
PV.OracleType = OracleClient.OracleType.VarChar
PV.Size = 10
PV.Direction = ParameterDirection.InputOutput



PV.ParameterName = "pv"
を追加してみて下さい。

引用:

CMD.Parameters.Add("PV", PV.OracleType.VarChar, 10).Value = "99"



こちらも"PV"ではなく、"pv"にしたほうが良いかと。
未記入
会議室デビュー日: 2004/08/22
投稿数: 7
投稿日時: 2004-08-23 17:43
.NETでの記述

Dim pv As New OracleClient.OracleParameter
Dim PLsql As String = "TEST(0, pv)"
pv.OracleType = OracleClient.OracleType.VarChar
pv.Size = 10
pv.Direction = ParameterDirection.InputOutput
pv.ParameterName = "pv"
CMD.Parameters.Add("pv", pv.OracleType.VarChar, 10).Value = "99"

CMD.CommandType = CommandType.StoredProcedure
CMD.CommandText = PLsql
CMD.ExecuteReader()       ← いつも、ここでエラーが表示されます
MsgBox(CMD.Parameters("pv").Value)

未記入
会議室デビュー日: 2004/08/22
投稿数: 7
投稿日時: 2004-08-23 17:43
.NETでの記述

Dim pv As New OracleClient.OracleParameter
Dim PLsql As String = "TEST(0, pv)"
pv.OracleType = OracleClient.OracleType.VarChar
pv.Size = 10
pv.Direction = ParameterDirection.InputOutput
pv.ParameterName = "pv"
CMD.Parameters.Add("pv", pv.OracleType.VarChar, 10).Value = "99"

CMD.CommandType = CommandType.StoredProcedure
CMD.CommandText = PLsql
CMD.ExecuteReader()       ← いつも、ここでエラーが表示されます
MsgBox(CMD.Parameters("pv").Value)

Jitta
ぬし
会議室デビュー日: 2002/07/05
投稿数: 6267
お住まい・勤務地: 兵庫県・海手
投稿日時: 2004-08-23 17:46
OTNと、マルチポストですね。
nodera
大ベテラン
会議室デビュー日: 2003/09/08
投稿数: 200
投稿日時: 2004-08-23 18:05
オラクル全然わからないけど、こうじゃないの?

pv.Value = "99";
CMD.Parameters.Add(pv);

じゃないと、OracleParameter作ってる意味ないのでは。。。
Jitta
ぬし
会議室デビュー日: 2002/07/05
投稿数: 6267
お住まい・勤務地: 兵庫県・海手
投稿日時: 2004-08-23 18:24
引用:

未記入さんの書き込み (2004-08-23 17:43) より:

Dim pv As New OracleClient.OracleParameter
Dim PLsql As String = "TEST(0, :pv)" ←ここ、違ってませんか?
pv.OracleType = OracleClient.OracleType.VarChar
pv.Size = 10
pv.Direction = ParameterDirection.InputOutput
pv.ParameterName = "pv"
[b]pv.Value = "99"
CMD.Parameters.Add(pv)[b] ← noderaさんの、指摘事項

CMD.CommandType = CommandType.StoredProcedure
CMD.CommandText = PLsql
CMD.ExecuteReader()       ← いつも、ここでエラーが表示されます
MsgBox(CMD.Parameters("pv").Value)

スキルアップ/キャリアアップ(JOB@IT)