我有这个存储过程:
public void render(float delta) {
Gdx.gl.glClearColor(0, 0, 0, 1);
Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT);
kid.draw(batch);
if(gameOver())//24
{
gameisover=true;
globalcounter--;
Gdx.app.log(Float.toString(globalcounter), "counter");
if(globalcounter==0) {
game.setScreen(new GameOverScreen(game, level));
dispose();
}
}
if(gameisover==true) {
globalcounter--;
Gdx.app.log(Float.toString(globalcounter), "counter");
if (globalcounter == 0) {
game.setScreen(new GameOverScreen(game, level));
dispose();
}
}
if(nextLevel())
{
prefs = Gdx.app.getPreferences("levels");
String name=prefs.getString("level", " ");
if(name==" ") {
prefs.putString("level", Float.toString(level + 1));
prefs.flush();
}
else {
prefs.putString("level", Float.toString(level+1));
prefs.flush();
}
game.setScreen(new Celebration(game,level+1));
dispose();
}
}
public boolean gameOver()//25
{
if(player.currentState== Collector.State.DEAD )// will show the game over screen after 3 seconds
{
return true;
}
return false;
}
public boolean nextLevel()//25
{
if(player.currentState== Collector.State.SUCCESS)// will show the game over screen after 3 seconds
{
return true;
}
return false;
}
获取下一个ID。然后我在数据服务和导入函数上添加了这个存储过程。
在我的数据服务上创建的自动代码是:
CREATE OR REPLACE PROCEDURE GET_NEXT_ID(NEXTID OUT INTEGER)
IS
BEGIN
SELECT SQC_RS_PEDIDO.NEXTVAL INTO NEXTID FROM DUAL;
END GET_NEXT_ID;
然后在我使用的数据服务上公开这个:
public ObjectResult<Nullable<global::System.Decimal>> GET_NEXT_ID(ObjectParameter nEXTID)
{
return base.ExecuteFunction<Nullable<global::System.Decimal>>("GET_NEXT_ID", nEXTID);
}
但是我得到了例外:
商店数据提供程序返回的数据读取器没有足够的列用于请求的查询。
我做错了什么?
答案 0 :(得分:1)
尝试在数据库中声明一个函数而不是一个过程。
CREATE OR REPLACE FUNCTION GET_NEXT_ID RETURN INTEGER IS
NEXTID INTEGER;
BEGIN
SELECT SQC_RS_PEDIDO.NEXTVAL INTO NEXTID FROM DUAL;
RETURN NEXTID;
END GET_NEXT_ID;
答案 1 :(得分:0)
您的查询期望读者将ID作为选择返回,但您的存储过程设置为通过输出变量传回参数。简单的修复只是返回select语句中的值,而不是将其插入到输出变量中。