質問編集履歴
3
新旧環境でOracle接続プロバイダが変わっていた旨を追記しました。
test
CHANGED
File without changes
|
test
CHANGED
@@ -99,3 +99,8 @@
|
|
99
99
|
・外側の波括弧はどういう働きをしているのか
|
100
100
|
・内側の波括弧はどういう働きをしているのか
|
101
101
|
・「resultset 1, NAME1, NAME2」とは何か
|
102
|
+
|
103
|
+
2023/1/18追記:
|
104
|
+
新旧環境でOracle接続プロバイダが変わっていました。
|
105
|
+
旧環境: 不明
|
106
|
+
新環境: OraOLEDB.Oracle.1
|
2
「該当のソースコード」および「試したこと」に注釈を追記しました。
test
CHANGED
File without changes
|
test
CHANGED
@@ -17,6 +17,9 @@
|
|
17
17
|
```
|
18
18
|
|
19
19
|
### 該当のソースコード
|
20
|
+
|
21
|
+
下記のソースが、「Win8+Oracle11g」では動作し、「Win10+Oracle19c」ではエラーとなりました。
|
22
|
+
※目視を使った転記のため、誤字等あるかもしれません。見つかり次第修正いたします。
|
20
23
|
|
21
24
|
```PACKAGE定義
|
22
25
|
PACKAGE PKG1 AS
|
@@ -72,11 +75,18 @@
|
|
72
75
|
|
73
76
|
CommandTextを変えた場合のエラーの変化を見ました。
|
74
77
|
|
78
|
+
元のソース(上記「VB.NET」の14行目):
|
79
|
+
|
80
|
+
.CommandText = “{call PKG1.proc1(?,{resultset 1, NAME1, NAME2})}”
|
81
|
+
|
82
|
+
試した修正内容:
|
83
|
+
|
75
84
|
.CommandText = “{call PKG1.proc1(?,{resultset 1, NAME1})}”
|
76
|
-
→エラーメッセージ変わらず
|
85
|
+
→PLS-00201: 識別子NAME1を宣言してください。(エラーメッセージ変わらず)
|
77
86
|
|
78
87
|
.CommandText = “{call PKG1.proc1(?,{resultset 1, NAME3})}”
|
79
88
|
→ PLS-00201: 識別子NAME3を宣言してください。
|
89
|
+
※元のエラーメッセージの「NAME1」という文字列がVB.NETのソースを参照したのかプロシージャを参照したのか不明だったため、これを試しました。
|
80
90
|
|
81
91
|
.CommandText = “{call PKG1.proc1(?)}”
|
82
92
|
→ PLS-00306: 引数の数または型が正しくありません。
|
1
誤投稿をそのままにしてしまっておりました、失礼致しました。
test
CHANGED
File without changes
|
test
CHANGED
@@ -1,30 +1,91 @@
|
|
1
1
|
### 前提
|
2
2
|
|
3
|
-
|
3
|
+
Windows 8上で動いているVB.NETのプログラム(Oracle11g R2と通信)があります。ソースはありますが、作成者は不明です。
|
4
|
-
(例)
|
5
|
-
Windows
|
4
|
+
このプログラムがWindows 10上でOracle19cと通信しても正常に動くか・動かない場合の修正内容を確認しています。
|
6
5
|
|
7
6
|
### 実現したいこと
|
8
7
|
|
9
|
-
ここに実現したいことを箇条書きで書いてください。
|
10
|
-
- [ ]
|
8
|
+
- [ ] パッケージ化されたストアドプロシージャを実行し、検索結果を取得したい
|
11
9
|
|
12
10
|
### 発生している問題・エラーメッセージ
|
13
11
|
|
14
12
|
```
|
13
|
+
ORA-06550: 行1、列30:
|
14
|
+
PLS-00201: 識別子NAME1を宣言してください。
|
15
|
-
|
15
|
+
ORA-06550: 行1、列7:
|
16
|
+
PL/SQL: Statement ignored
|
16
17
|
```
|
17
18
|
|
18
19
|
### 該当のソースコード
|
19
20
|
|
20
|
-
```
|
21
|
+
```PACKAGE定義
|
22
|
+
PACKAGE PKG1 AS
|
23
|
+
TYPE tNAME1 is TABLE of VARCHAR2(64) INDEX BY BINARY_INTEGER;
|
24
|
+
TYPE tNAME2 is TABLE of VARCHAR2(64) INDEX BY BINARY_INTEGER;
|
25
|
+
|
26
|
+
PROCEDURE proc1
|
27
|
+
(
|
28
|
+
in1 IN char,
|
29
|
+
NAME1 OUT tNAME1,
|
30
|
+
NAME2 OUT tNAME2
|
31
|
+
);
|
32
|
+
|
33
|
+
END PKG1;
|
34
|
+
```
|
35
|
+
|
36
|
+
``` PACKAGE BODY定義
|
37
|
+
PACKAGE BODY PKG1 AS
|
38
|
+
PROCEDURE proc1
|
39
|
+
(
|
40
|
+
in1 IN char,
|
41
|
+
NAME1 OUT tNAME1,
|
42
|
+
NAME2 OUT tNAME2
|
43
|
+
)
|
44
|
+
IS
|
45
|
+
(以降、処理本体)
|
46
|
+
```
|
47
|
+
|
48
|
+
```VB.NET
|
49
|
+
Dim objRS As New ADODB.RecordSet
|
50
|
+
Dim objParam As New ADODB.Parameter
|
51
|
+
Dim objCmd As New ADODB.Command
|
52
|
+
With objRS
|
53
|
+
.CursorType = ADODB.CursorTypeEnum.adOpenStatic
|
54
|
+
.LockType = ADODB.LockTypeEnum.adLockReadOnly
|
21
|
-
|
55
|
+
End With
|
56
|
+
|
57
|
+
With objCmd
|
58
|
+
.let_ActiveConnection(conADO) ‘conADOはADODB.Connection型。事前に接続済み。
|
59
|
+
.CommandType = ADODB.CommandTypeEnum.adCmdText
|
60
|
+
objParam = .CreateParameter(“input”, ADODB.DataTypeEnum.adVarChar, ADODB.ParameterDirectionEnum.adParamInput, Len(strInput), strInput) ‘ strInputはstring型の引数
|
61
|
+
.Parameters.Append(objParam)
|
62
|
+
.CommandText = “{call PKG1.proc1(?,{resultset 1, NAME1, NAME2})}”
|
63
|
+
End With
|
64
|
+
|
65
|
+
objRS.Source = objCmd
|
66
|
+
objRS.Open() ‘ ここでエラー
|
67
|
+
‘以降、objRS.Fields(“NAME1”).Value、objRS.Fields(“NAME2”).Valueを参照して処理
|
68
|
+
|
22
69
|
```
|
23
70
|
|
24
71
|
### 試したこと
|
25
72
|
|
73
|
+
CommandTextを変えた場合のエラーの変化を見ました。
|
74
|
+
|
75
|
+
.CommandText = “{call PKG1.proc1(?,{resultset 1, NAME1})}”
|
76
|
+
→エラーメッセージ変わらず
|
77
|
+
|
78
|
+
.CommandText = “{call PKG1.proc1(?,{resultset 1, NAME3})}”
|
26
|
-
|
79
|
+
→ PLS-00201: 識別子NAME3を宣言してください。
|
80
|
+
|
81
|
+
.CommandText = “{call PKG1.proc1(?)}”
|
82
|
+
→ PLS-00306: 引数の数または型が正しくありません。
|
83
|
+
|
27
84
|
|
28
85
|
### 補足情報(FW/ツールのバージョンなど)
|
29
|
-
|
86
|
+
PKG1.proc1の処理本体は自スキーマのシノニムを参照しています。そのシノニムは他スキーマのテーブルを参照しています。
|
30
87
|
|
88
|
+
前提として、「.CommandText = “{call PKG1.proc1(?,{resultset 1, NAME1, NAME2})}”」の文法的意味が不明なので理解したいです。
|
89
|
+
・外側の波括弧はどういう働きをしているのか
|
90
|
+
・内側の波括弧はどういう働きをしているのか
|
91
|
+
・「resultset 1, NAME1, NAME2」とは何か
|