Oracle存储过程报错,求助大神

Sunshine_kids 2017-02-23 02:14:24
sql语句
create or replace procedure T_PHM_DELETEDESKTOPNAVIGATION(deskId in number ,
desknavigationId in number, out_mark out varchar2) as
begin
out_mark := '未处理';

delete from T_PHM_NAVIGATION_INFO where DESKTOPID = deskId and NAVIGATIONID = desknavigationId;

delete from T_PHM_NAVIGATION_LANG where DESKTOPID = deskId and NAVIGATIONID= desknavigationId;

commit;

out_mark := '提交成功';

end T_PHM_DELETEDESKTOPNAVIGATION;



调用代码;
DASCommand dasCmdRel = DASCommandFactory.getDASCommand();
// 新建一个命令请求对象
CmdRequest cmdRequest = new CmdRequest();
// 在命令请求对象中设置存储过程名。
cmdRequest
.setProcedure("T_PHM_DELETEDESKTOPNAVIGATION(:deskId, :desknavigationId, :out_mark)");
// 设置输入参数
cmdRequest.addDataParam("deskId", DataType.INT,
desktopInfo.getDesktopId(), DataParam.PARAM_TYPE_IN);
cmdRequest.addDataParam("desknavigationId", DataType.INT, navigationId,
DataParam.PARAM_TYPE_IN);

// 设置输出参数也可以采用设置输入参数的方法,但下面设置输出参数使用了另一种方式。

DataParam outParam1 = cmdRequest.addParam();
outParam1.setParamName("out_mark");
outParam1.setDataType(DataType.STRING);
outParam1.setParamType(DataParam.PARAM_TYPE_OUT);

try
{
// 同步执行DAS命令请求,获取结果到输出参数
DataResult dataResult = dasCmdRel.execute(cmdRequest); //每次都是到这里报错!!!!!!!!!!!!!
List<DataParam> params = dataResult.getOutParams();


报错:
Names of stored procedures, the number of parameters, or the type of parameters is configured incorrectly more message: SQLErrorCode: 6550 ORA-06550: 第 1 行, 第 7 列:
PLS-00905: object PHM.T_PHM_DELETEDESKTOPNAVIGATION is invalid
ORA-06550: 第 1 行, 第 7 列:
PL/SQL: Statement ignored
...全文
261 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
POM_24 2017-02-23
  • 打赏
  • 举报
回复
CREATE OR REPLACE PROCEDURE T_PHM_DELETEDESKTOPNAVIGATION(DESKID           IN NUMBER,
                                                          DESKNAVIGATIONID IN NUMBER,
                                                          OUT_MARK         OUT VARCHAR2) AS
  VV_COUNT1 NUMBER;
  VV_COUNT2 NUMBER;
BEGIN
  SELECT COUNT(1)
    INTO VV_COUNT1
    FROM T_PHM_NAVIGATION_INFO
   WHERE DESKTOPID = DESKID
     AND NAVIGATIONID = DESKNAVIGATIONID;

  SELECT COUNT(1)
    INTO VV_COUNT2
    FROM T_PHM_NAVIGATION_LANG
   WHERE DESKTOPID = DESKID
     AND NAVIGATIONID = DESKNAVIGATIONID;

  IF VV_COUNT1 > 0 AND VV_COUNT2 > 0 THEN
    DELETE FROM T_PHM_NAVIGATION_INFO
     WHERE DESKTOPID = DESKID
       AND NAVIGATIONID = DESKNAVIGATIONID;
  
    DELETE FROM T_PHM_NAVIGATION_LANG
     WHERE DESKTOPID = DESKID
       AND NAVIGATIONID = DESKNAVIGATIONID;
    COMMIT;
  
    OUT_MARK := '提交成功';
  ELSE
    OUT_MARK := '输入数据不存在';
  END IF;

END;
没有判定,假如没有数据,删除报错!
Sunshine_kids 2017-02-23
  • 打赏
  • 举报
回复
代用代码: /* * 删除导航项 */ public String deletDesktopNavigateInfo(DesktopInfo desktopInfo, String navigationId) { DASCommand dasCmd = DASCommandFactory.getDASCommand(); CmdRequest cmdRequestrel = new CmdRequest(); cmdRequestrel.setNamingLabel("queryDesktopNavigationRel"); cmdRequestrel.addDataParam("desktopId", DataType.INT, desktopInfo.getDesktopId()); cmdRequestrel.addDataParam("navigationId", DataType.INT, navigationId); try { DataResult dataResultrel = dasCmd.execute(cmdRequestrel); DataSet dataSetRel = dataResultrel.getDataSet(); if (dataSetRel != null) { while (dataSetRel.next()) { if (dataSetRel.getInt("COUNT(*)") != 0) { return "false"; } } } } catch (BMEException e) { e.printStackTrace(); } DASCommand dasCmdRel = DASCommandFactory.getDASCommand(); // 新建一个命令请求对象 CmdRequest cmdRequest = new CmdRequest(); // 在命令请求对象中设置存储过程名。 cmdRequest .setProcedure("T_PHM_DELETEDESKTOPNAVIGATION(:deskId, :desknavigationId, :out_mark)"); // 设置输入参数 cmdRequest.addDataParam("deskId", DataType.INT, desktopInfo.getDesktopId(), DataParam.PARAM_TYPE_IN); cmdRequest.addDataParam("desknavigationId", DataType.INT, navigationId, DataParam.PARAM_TYPE_IN); // 设置输出参数也可以采用设置输入参数的方法,但下面设置输出参数使用了另一种方式。 DataParam outParam1 = cmdRequest.addParam(); outParam1.setParamName("out_mark"); outParam1.setDataType(DataType.STRING); outParam1.setParamType(DataParam.PARAM_TYPE_OUT); try { // 同步执行DAS命令请求,获取结果到输出参数 DataResult dataResult = dasCmdRel.execute(cmdRequest); //*!!!!!!!!!*执行到此行报错*!!!!!!!!,直接到最后返回true了* List<DataParam> params = dataResult.getOutParams(); if (params == null || params.size() == 0) { return "false"; } for (DataParam para : params) { DEBUGGER.debug(para.getParamName()); DEBUGGER.debug(para.getString()); } } catch (BMEException e) { } return "true"; }
Sunshine_kids 2017-02-23
  • 打赏
  • 举报
回复
报错信息: http-nio-19998-exec-7|2017-02-23 14:38:34,349|Failed to execute sql: T_PHM_DELETEDESKTOPNAVIGATION(?,?,?) com.huawei.bme.das.core.exception.USQLException: Names of stored procedures, the number of parameters, or the type of parameters is configured incorrectly more message: SQLErrorCode: 6550 ORA-06550: 第 1 行, 第 7 列: PLS-00905: object PHM.T_PHM_DELETEDESKTOPNAVIGATION is invalid ORA-06550: 第 1 行, 第 7 列: PL/SQL: Statement ignored
Sunshine_kids 2017-02-23
  • 打赏
  • 举报
回复
创建存储过程的sql语句是在源码中找到的,现在数据库中已经有这个存储过程了
卖水果的net 2017-02-23
  • 打赏
  • 举报
回复
存储过程,没有编译通用,贴一下具体错误出来

17,086

社区成员

发帖
与我相关
我的任务
社区描述
Oracle开发相关技术讨论
社区管理员
  • 开发
  • Lucifer三思而后行
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧