我试图用ADO和VBA调用PL/SQL块,但我无法传递输入和/或输出绑定变量(可能也称为参数).
dim cn as ADODB.connection
' ... open connection ...
dim plsql as string
plsql = "declare"
plsql = plsql & " num_in number := ?;"
plsql = plsql & " num_out number; "
plsql = plsql & "begin"
plsql = plsql & " num_out := num_in * 5;"
plsql = plsql & " ? := num_out;"
plsql = plsql & "end;"
dim cm as ADODB.command
set cm = new ADODB.command
set cm.activeConnection = cn
cm.commandText = plsql
cm.commandType = adCmdText
cm.parameters.append cm.createParameter(, adDouble, adParamInput,, 5)
cm.parameters.append cm.createParameter(, adDouble, adParamOutput )
cm.execute ' FAILS HERE
msgBox(cm.parameters(2))
Run Code Online (Sandbox Code Playgroud)
上面的代码段在ORA-01008的cm.execute行上失败:并非所有变量都绑定
我很感激为解决我的问题提供任何帮助.
似乎声明不能以a开头declare.(感谢Thomas Jones-Low的宝贵评论).
因此,该声明必须包含在另一个begin .. end块中:
' additional begin so that the statement does not start with a declare:
plsql = "begin "
plsql = plsql & "declare"
plsql = plsql & " num_in number := ?;"
plsql = plsql & " num_out number; "
plsql = plsql & "begin"
plsql = plsql & " num_out := num_in * 5;"
plsql = plsql & " ? := num_out;"
plsql = plsql & "end;"
' closing the additional begin:
plsql = plsql & "end;"
Run Code Online (Sandbox Code Playgroud)
现在,它按预期工作.