当前位置: 代码迷 >> Oracle管理 >> oracle一段存储过程SQL,但是出错,这样写不行吗
  详细解决方案

oracle一段存储过程SQL,但是出错,这样写不行吗

热度:139   发布时间:2016-04-24 04:17:17.0
oracle一段存储过程SQL,但是报错,这样写不行吗
本帖最后由 default7 于 2014-07-02 11:55:05 编辑

create or replace PROCEDURE PR_GAME 
(
      vId             IN         TB_GAME.id%TYPE,
      vGameId         IN         TB_GAME.gameid%TYPE,
      vAgentIdP       IN         TB_GAME.agentidp%TYPE,
      vAgentidI       IN         TB_GAME.agentidi%TYPE,
      vServerName     IN         TB_GAME.servername%TYPE,
      vFileName       IN         TB_GAME.filename%TYPE,
      vAddUserId      IN         TB_GAME.adduserid%TYPE,
      vOnlyFileName   IN         int,
      oResInt         OUT        int
) AS 

i int;
sId varchar2;
sAgentId varchar2;

BEGIN

  sId := vAgentIdP || vAgentIdI || vGameId;
  sAgentId := vAgentIdP || vAgentIdI;
  
  SELECT COUNT(1) INTO i FROM TB_GAME WHERE ID=sId AND ID != vId;
  
  IF i<>0 THEN

    oResInt := 1;

  ELSE IF vId THEN
  
    IF vOnlyFileName=1 THEN --如果传入了vOnlyFileName=1,只更新 FileName字段的值
      UPDATE USER1.TB_GAME SET FileName=vFileName WHERE ID=vId;
    ELSE
      UPDATE USER1.TB_GAME SET GameId=vGameId,AgentIdP=vAgentIdP,AgentIdI=vAgentIdI,ServerName=vServerName,FileName=vFileName,AddUserId=vAddUserId
      WHERE ID=vId;
    END IF;
    COMMIT;
    oResInt := 0;  
    
  ELSE

    INSERT INTO USER1.TB_GAME (ID,GameId,AgentId,AgentIdP,AgentIdI,ServerName,FileName,AddUserId,ADDTIME)
    VALUES(sId,vGameId,sAgentId,vAgentIdP,vAgentIdI,vServerName,vFileName,vAddUserId,sysdate); 
    COMMIT;
    oResInt := 0;
    
  END IF;
  
  EXCEPTION
    WHEN OTHERS THEN
      oResInt := -1;
  
END PR_GAME;

1)连接||中间可否分开?
2)大小写的问题,如果字段名字为 GAMEID,我是否可以传入参数为GameId 
3)在Oracle存储过程中如何将传入的参数拿来放到该存储过程的变量中
4)表的前面一定要指定用户吗USER1.TB_GAME,我发现直接写TB_GAME也是可以的


我这一段要实现的是一个记录的CUR,我按照自己认为的思路来写的,可是运行失败。希望可以指出错误


------解决方案--------------------
引用:
1)连接
------解决方案--------------------
中间可否分开?
2)大小写的问题,如果字段名字为 GAMEID,我是否可以传入参数为GameId 
3)在Oracle存储过程中如何将传入的参数拿来放到该存储过程的变量中
4)表的前面一定要指定用户吗USER1.TB_GAME,我发现直接写TB_GAME也是可以的


我这一段要实现的是一个记录的CUR,我按照自己认为的思路来写的,可是运行失败。希望可以指出错误

1.这个问题不知道你想表达什么
2.字段名大小写和参数没有直接的关系,因为这里的参数其实就是一个变量而且,你用到的是这个变量的值。
3.比如参数为pi_value,变量为v_value.
v_value:=pi_value.
还有就是参数可以当变量直接使用。
4.如果是如果是当前用户自己的table,可以不指定。还有就是可以为表建立一个public synonym指定某个用户下的某个table,每个用户都可以直接操作这个public synonym. 在查表得时候最好是带上user
  相关解决方案