sql - 错误:调用过程的参数数量错误
问题描述
程序是:
PERSON_Q(STATUS_OBJ 中的状态,COMM OUT VARCHAR2)
创建或替换 TYPE STATUS_OBJ AS OBJECT (ID NUMBER, MESSAGE VARCHAR2(255), STATE NUMBER, NAME VARCHAR2(1000));
我的Java代码是:
public void update() {
OracleCallableStatement os = null;
Connection conn = null;
Object[] obj = new Object[4];
try {
DriverManager.registerDriver(new oracle.jdbc.OracleDriver());
conn = DriverManager.getConnection(url, username, pwd);
obj[0]=2;
obj[1]="status";
obj[2]=2;
obj[3]="name";
os = (OracleCallableStatement)conn.prepareCall("call PERSON_Q(?,?)");
StructDescriptor sd = StructDescriptor.createDescriptor("STATUS_OBJ", conn);
os.setObject(1, new STRUCT(sd, conn, obj));
os.registerOutParameter(2, OracleTypes.VARCHAR, "COMM");
int response = os.executeUpdate();
} catch(){SQLException e}
}
例外:
{ORA-06553:PLS-306:调用“PERSON_Q”的参数数量或类型错误}
解决方案
看起来您的 SP 只有一个 IN 参数,但在您的代码中您试图传入两个参数:
call PERSON_Q(?,?)
推荐阅读
- javascript - 如何在 javascript 中动态访问属性访问器?
- multithreading - 如何在多核处理器中调度任务
- python - 使用点积从两个不同的数组创建一个数组
- git - 如何始终在 Windows 11 终端中显示 git 分支?
- r - 单击 Shiny 上的日历时调整边距
- c# - 我在制作一串字符数组以在 Unity 引擎中打印到屏幕时遇到问题
- flutter - 使用 FormData 时出现错误
- javascript - 将对象分配给多个数组元素时的Javascript循环对象数组
- go - 如何使用 Golang 中的 time 包设置未来的时间
- flutter - 如何从 _storageToken.read() 调用中读取字符串值?