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

如题所述

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;


温馨提示:答案为网友推荐,仅供参考
第1个回答  2013-09-29
这个容易,用merge就行了,具体用法大致如下、
merge into 目标表
using(select ……) -----这里是要更新或要插入的数据,一般用select来构造
on ……------这里是更新判断时的关联条件
when match then update 表名 set 字段名=…… -----如果能匹配(即有数据)则更新
WHEN NOT MATCHED THEN
INSERT (字段列表)
values(值列表)

大致如此,具体更详细的用法你可以进一步百度MERGE的用法,资料很多的,这里不赘述了本回答被网友采纳
第2个回答  2017-06-22
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);

第3个回答  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;

本回答被提问者采纳
第4个回答  2013-09-29
你这个说的太含糊了,这个要看表结构 有没设置主键,你应该是要根据主键的值来判断update 还是insert吗?