oracle 如果存在主键则更新(update),否则添加新纪录(insert)怎么写。

 我来答
shewai12110
2013-09-29 · TA获得超过145个赞
知道答主
回答量:69
采纳率:0%
帮助的人:32.5万
展开全部

Create Or Replace Procedure p_Update_Add(Pn_Id     In Number, --传入的id

                                         Ln_Code   Number, --返回码

                                         Lr_Reinfo Number) Is


  Ln_Flags Number;

Begin

  Select Count(1) Into Ln_Flags From t_Test Where Id = Pn_Id; --t_test为测试表

  If Ln_Flags > 0 Then

    --有一条或多条记录存在,表示主键已经存在,进行更新操作

    Update t_Test Set Xxx = Xxx;

    Lr_Code   := 1;

    Lr_Reinfo := '进行更新';

  Elsif Ln_Flags = 0 Then

    --没有记录,进行添加操作

    Insert Into t_Test Values (Xx, Xxx, Xxx, Xxx);

    Lr_Code   := 2;

    Lr_Reinfo := '进行新增';

  Else

    Lr_Code   := -1;

    Lr_Reinfo := '操作失败';

  End If;

Exception

  When Others Then

    Dbms_Output.Put_Line('出现异常');

    Rollback;  

End;


zjy198518
2013-09-29 · TA获得超过867个赞
知道小有建树答主
回答量:777
采纳率:80%
帮助的人:570万
展开全部
这个容易,用merge就行了,具体用法大致如下、
merge into 目标表
using(select ……) -----这里是要更新或要插入的数据,一般用select来构造
on ……------这里是更新判断时的关联条件
when match then update 表名 set 字段名=…… -----如果能匹配(即有数据)则更新
WHEN NOT MATCHED THEN
INSERT (字段列表)
values(值列表)

大致如此,具体更详细的用法你可以进一步百度MERGE的用法,资料很多的,这里不赘述了
本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
啊_科
2017-06-22 · TA获得超过268个赞
知道小有建树答主
回答量:284
采纳率:0%
帮助的人:128万
展开全部
MERGE INTO table_name alias1            --需要做更新或新增记录的表
USING (table|view|sub_query) alias2     -- 对照表
ON (join condition)                     --关联条件
WHEN MATCHED THEN                       -- 当匹配上则更新
    UPDATE table_name 
    SET col1 = col_val1, 
           col2 = col_val2 
WHEN NOT MATCHED THEN                   -- 无匹配记录则 新增数据
    INSERT (column_list) VALUES (column_values);
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
匿名用户
2017-08-07
展开全部

可以用merge语句。给你举个例子

CREATE OR REPLACE PROCEDURE test (in_deptno   IN NUMBER,
                                              in_dname    IN VARCHAR2,
                                              in_loc      IN VARCHAR2)
AS
    t_record   scott.dept%ROWTYPE;
BEGIN
    SELECT in_deptno, in_dname, in_loc INTO t_record FROM DUAL;
---用merge语句
    MERGE INTO scott.dept dept
         USING (SELECT t_record.deptno, t_record.dname, t_record.loc
                  FROM DUAL)
            ON (dept.deptno = t_record.deptno)
    WHEN MATCHED
    THEN
        UPDATE SET dept.dname = t_record.dname, dept.loc = t_record.loc
    WHEN NOT MATCHED
    THEN
        INSERT     (deptno, dname, loc)
            VALUES (t_record.deptno, t_record.dname, t_record.loc);
END;
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
TUBER727
2013-09-29 · TA获得超过428个赞
知道小有建树答主
回答量:351
采纳率:100%
帮助的人:113万
展开全部
你这个说的太含糊了,这个要看表结构 有没设置主键,你应该是要根据主键的值来判断update 还是insert吗?
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(4)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式