Oracle 编译提示Right(),Left(),RET_DUPLICATE()等必须申明标识符 可是我已经定义了这些函数了。

[复制链接]
查看11 | 回复1 | 2011-8-2 15:15:36 | 显示全部楼层 |阅读模式
CREATE OR REPLACE PROCEDURE SYSTEM.ServiceClientInsert
(
pServiceClientCode INVARCHAR,
pServiceClientName INNVARCHAR2,
pComputerName
INVARCHAR2,
pIsAccountClient INNUMBER,
pIsSubsidyClient INNUMBER,
pRet
OUT NUMBER
)
AS
vCnt NUMBER;
BEGIN
IF Right(pComputerName, 1) = '.' THEN

pComputerName := Left(pComputerName, LENGTH(pComputerName)-1);

pComputerName := UPPER(pComputerName);
END IF;
SELECT COUNT(*) INTO vCnt FROM ServiceClient WHERE

ServiceClientCode = pServiceClientCode OR

ServiceClientName = pServiceClientName OR

ComputerName = vComputerName;
IF vCnt > 0 THEN

pRet := RET_DUPLICATE();

RETURN;
END IF;
IF pIsAccountClient = 1 THEN

UPDATE ServiceClient SET IsAccountClient = 0;
END IF;
IF pIsSubsidyClient = 1 THEN

UPDATE ServiceClient SET IsSubsidyClient = 0;
END IF;
INSERT INTO ServiceClient(ServiceClientID, ServiceClientCode, ServiceClientName, ComputerName, IsAccountClient, IsSubsidyClient)
VALUES(SqServiceClient.NEXTVAL, pServiceClientCode, pServiceClientName, pComputerName, pIsAccountClient, pIsSubsidyClient);
COMMIT;
pRet := RET_OK();
EXCEPTION WHEN OTHERS THEN
pRet := RET_FAIL();
ROLLBACK;
END serviceclientinsert;

回复

使用道具 举报

千问 | 2011-8-2 15:15:36 | 显示全部楼层
oracle 没有RIGHT这样的函数的,如果你要倒数第一个字符,可以这么写SUBSTR(pcomputername,LENGTH(pcomputername)-1,1)其余同理,LEFT也要改。给两个常用的字符串函数你就可以搞定了。INSTR(C1,C2,I,J) 在一个字符串中搜索指定的字符,返回发现指定的字符的位置; C1 被搜索的字符串 C2 希望搜索的字符串 I 搜索的开始位置,默认为1 J 出现的位置,默认为1 SUBSTR(string,start,count) 取子字符串,从start开始,取count个...
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行