首页 新闻 论坛 群组 Blog 文档 下载 读书 Tag 网摘 搜索 .NET Java 游戏 视频 人才 外包 培训 数据库 书店 程序员
中国软件网
欢迎您:游客 | 登录 注册 帮助
  • if语句和exists语句一起使用,在oracle里面出错 [已结贴,结贴人:yang79tao]
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-05-09 17:19:47 楼主
    CREATE OR REPLACE
    PROCEDURE INITDATA
    ( Addr IN NUMBER
    , Value IN NUMBER
    ) AS
    BEGIN
    if exists (select Addr from BeginEletricity where BeginEletricity.Addr = Addr) then
        update BeginEletricity set BeginEletricity.Value = Value, State = 0 where (BeginEletricity.Addr = Addr and BeginEletricity.Value <> Value);
    else
        insert into BeginEletricity values(Addr,  Value, 0);
    end if;
    END INITDATA;

    上面的代码从MSSQLServer复制而来(稍微改动了一下,加了几个分号),在oracle里面出现语法错误!请问有什么办法解决?
    50  修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-05-09 17:27:141楼 得分:15
    用Select count(*)来判断是否有存在
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-05-09 17:38:012楼 得分:15
    vRowCnt int;

    select count(*) into vRowCnt from ....
    if vRowCnt >0 then
    ....

    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • zaodt
    • 等级:
    发表于:2008-05-10 00:37:173楼 得分:10

    Oracle 数据库,我没有研究过。


    不过,EXISTS 很可能是 SQL SERVER 的特有关键字。

    ============================

    EXISTS
    指定一个子查询,检测行的存在。

    语法
    EXISTS subquery

    参数
    subquery

    结果类型
    Boolean

    结果值
    如果子查询包含行,则返回 TRUE。

    ============================

    杨狼,好久没来了!
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-05-10 20:21:104楼 得分:5
    引用 2 楼 iamknight 的回复:
    vRowCnt int;

    select count(*) into vRowCnt from ....
    if vRowCnt >0 then
    ....

    这个方法可以。
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-05-11 19:25:015楼 得分:0
    to
    zaodt
    至尊宝宝 @ 杭州
    是啊,最近有点忙。

    用count函数,我也知道行,但我只需要知道存不存在,没有必要知道具体存在多少个记录,用exists效率高啊!
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-05-11 19:28:056楼 得分:0
    我的同事是这样实现的:
    vRowCnt int;
    vRowCnt := 0;
    select 1 into vRowCnt where exists ...

    if (1 = vRowCnt)
    ...

    这种变通的实现方法,效率比count函数高,只是觉得太别扭了,所以才来问问。
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • shakaqrj
    • 等级:
    发表于:2008-05-12 08:55:307楼 得分:5
    exists不是sqlserver特有的
    但是有这样的用法么?
    第一次看见exists可以单独作逻辑判断的
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-05-12 12:18:318楼 得分:0
    我的代码是从MSSQLSERVER复制而来的,显然,MSSQLSERVER是可以这样用的,如果exists本身就返回一个布尔型变量的话,为什么不能直接用于if语句呢?
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • shakaqrj
    • 等级:
    发表于:2008-05-12 13:13:069楼 得分:0
    我也不知道
    按理可以
    不过我以前没见过
    修改 删除 举报 引用 回复

    网站简介广告服务网站地图帮助联系方式诚聘英才English 问题报告
    世纪乐知(北京)网络技术有限公司 版权所有 京 ICP 证 020026 号
    Copyright © 2000-2007, CSDN.NET, All Rights Reserved