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.字段名大小写和参数没有直接的关系,因为这里的参数其实就是一个变量而且,你用到的是这个变量的值。
3.比如参数为pi_value,变量为v_value.
v_value:=pi_value.
还有就是参数可以当变量直接使用。
4.如果是如果是当前用户自己的table,可以不指定。还有就是可以为表建立一个public synonym指定某个用户下的某个table,每个用户都可以直接操作这个public synonym. 在查表得时候最好是带上user