相关疑难解决方法(0)

Oracle中的双表是什么?

我听说有人提到这张桌子,不知道它是什么.

oracle dual-table

218
推荐指数
7
解决办法
21万
查看次数

oracle sql:如果存在则更新,否则插入

可能重复:
Oracle:如何UPSERT(更新或插入表?)

嗨,

我有一个表,如果记录已经存在,则必须修改该记录,否则必须插入新记录.Oracle sql不接受IF EXISTS,否则我会做一个if - update - else - insert查询.我看过MERGE但它只适用于多个表.我该怎么办?

sql oracle

33
推荐指数
4
解决办法
15万
查看次数

用于MySQL REP的替代Oracle替代方案

在MySQL中我们使用

REPLACE INTO
Run Code Online (Sandbox Code Playgroud)

如果某行不存在则插入,如果存在则更新.

Oracle中是否有相应的命令?

mysql oracle

6
推荐指数
1
解决办法
8865
查看次数

Oracle Merge.我怎么用呢?

我有这个功能:

      Procedure UpdateDefaultWeight  ( vYear Number, costWeight Number, qualityWeight Number, serviceWeight Number ) 
      AS

        type weight_table is table of Number(5,2) index by varchar2(50);
        weightArray weight_table;
        currentPosition varchar2(50);
      Begin

        weightArray('Cost Weighting')    := costWeight;
        weightArray('Quality Weighting') := qualityWeight;
        weightArray('Service Weighting') := serviceWeight;

        currentPosition := weightArray.first;

        Loop
          Exit When currentPosition is null;
          Insert Into GVS.GVSSD16_DFLT_WEIGHT
            ( cal_year, metric_name, metric_val )
          Values
            ( vYear, currentPosition, weightArray(currentPosition) ); 

          currentPosition := weightArray.next(currentPosition);
        End Loop;
      END;
Run Code Online (Sandbox Code Playgroud)

就在我写这篇文章的时候,它只是一个INSERT.但是,我需要UPSERT.我查看了有关MERGE的文档,但主要是让我对如何将语法应用于我的特定情况感到困惑.

我看过这里这里,我得到了它的主旨,但语法使我失望.

有人关心帮助Oracle新手吗?

oracle plsql upsert

5
推荐指数
1
解决办法
1万
查看次数

为什么 upsert 不是基本的 SQL 操作

为什么 SQL 不支持 upsert 用例?我不是在问如何在特定的 db(*) 中做。我想知道的是为什么 upsert 不是像插入和更新这样的基本操作。我的意思是这是一个非常简单的用例,对吗?我想一定有一些基本的数据库优先原则在执行 upsert 时被破坏,或者数据库引擎在面对 upsert 时面临的一些技术挑战。

*. 我了解 mysql 语法和 SQL Merge 语法。顺便说一句,即使在使用这种特定于数据库的语法时,您也需要小心原子性和锁定。并且使用合并语法,创建一个伪表感觉不对。

编辑:我正在编辑此内容以澄清我不是在征求意见。所以我认为这个问题不应该被屏蔽。

sql upsert

5
推荐指数
1
解决办法
728
查看次数

Oracle SQL Developer:如果存在更新,则插入缺少右括号编译器错误

我一直在尝试在Oracle的SQL Developer中编写一个SQL查询,如果它存在则会更新一行,如果不存在则插入一行.除主键(UNITOFMEASURE_USERID)外,还有三列:UNITOFMEASUREID,USERID和ACTIVE.对UNITOFMEASUREID和USERID的组合有一个唯一的约束,因此对于每个值的组合,有一行或0.我一直在尝试两种不同的SQL排列,并且它们都返回类似的编译错误,抱怨缺少右括号.这就是我的尝试:第一个安排:

UPDATE NORSEMEN.UNITOFMEASURE_USER SET (ACTIVE=1) WHERE UNITOFMEASUREID=:unitOfMeasureId AND USERID=:userId
IF @@ROWCOUNT=0
    INSERT INTO NORSEMEN.UNITOFMEASURE_USER (UNITOFMEASUREID, USERID) VALUES (:unitOfMeasureId, :userId)
Run Code Online (Sandbox Code Playgroud)

首次安排的SQL Developer错误响应:

Error at Command Line:1 Column:46
Error report:
SQL Error: ORA-00907: missing right parenthesis
00907. 00000 -  "missing right parenthesis"
*Cause:    
*Action:
Run Code Online (Sandbox Code Playgroud)

第二种安排:

IF EXISTS (SELECT * FROM NORSEMEN.UNITOFMEASURE_USER WHERE UNITOFMEASUREID=:unitOfMeasureId AND USERID=:userId)
    UPDATE NORSEMEN.UNITOFMEASURE_USER SET (ACTIVE = 1) UNITOFMEASUREID=:unitOfMeasureId AND USERID=:userId
ELSE
    INSERT INTO NORSEMEN.UNITOFMEASURE_USER (UNITOFMEASUREID, USERID) VALUES (:unitOfMeasureId, :userId)
Run Code Online (Sandbox Code Playgroud)

第二种安排的SQL Developer错误响应:

Error at Command Line:2 Column:47
Error …
Run Code Online (Sandbox Code Playgroud)

sql oracle compiler-errors oracle-sqldeveloper

4
推荐指数
1
解决办法
8094
查看次数

Oracle:ON DUPLICATE KEY UPDATE

我正在尝试实现我 Michiel de Mare 找到的解决方案,用一个(最好是简单的语法感知)查询来更新多个记录.我想要学习的示例代码如下所示:

INSERT INTO table (id,Col1,Col2) VALUES (1,1,1),(2,2,3),(3,9,3),(4,10,12) ON DUPLICATE KEY UPDATE Col1=VALUES(Col1),Col2=VALUES(Col2);
Run Code Online (Sandbox Code Playgroud)

我正在使用Oracle(并且还不熟悉SQL查询).

基于一些动态内容,我将类似于上面的查询连接起来.它的长度可能会有所不同,具体取决于我要更新的记录数,但这是我生成的查询示例:

INSERT INTO my_table (question_id,ug) VALUES (30,0),(31,1) ON DUPLICATE KEY UPDATE ug=VALUES(ug) 
Run Code Online (Sandbox Code Playgroud)

以上查询收到此错误:

Native message: ORA-00933: SQL command not properly ended
Run Code Online (Sandbox Code Playgroud)

我正在处理一个内容管理系统,它有一个运行查询的函数调用; 在这个框架内.我不认为这是相关的,但我从来不需要把';' 但是,在查询结束时,我尝试使用和不使用分号.

sql oracle upsert

4
推荐指数
1
解决办法
1万
查看次数

在 DATE 列上使用“MERGE INTO”和“SELECT FROM Dual”时出现 ORA-00904“无效标识符”错误

我在 Oracle 数据库上有以下 PL/SQL 存储过程:

PROCEDURE MyProcedure (
    p_id IN NUMBER
  , p_date IN DATE
  , p_num IN NUMBER) 
  AS
  BEGIN
    MERGE INTO MY_TABLE mytable
    USING (SELECT
            p_id,
            p_date,
            p_num
          FROM dual) temp
    ON (mytable.myid = temp.p_id AND mytable.mydate = temp.p_date)
  WHEN MATCHED THEN
    UPDATE SET
      DIFFERENCE = temp.p_num,
  WHEN NOT MATCHED THEN
    INSERT VALUES (
      MY_TABLEIDSEQ.NEXTVAL,
      temp.p_id,
      temp.p_date,
      temp.p_num);
END MyProcedure;
Run Code Online (Sandbox Code Playgroud)

MY_TABLE表定义如下:

CREATE TABLE "MY_DBO"."MY_TABLE" 
   (
     "MYTABLEID" NUMBER(38,0),
     "MYID" NUMBER(38,0),
     "MYDATE" DATE,
     "MYNUM" NUMBER(25,4)
   )
Run Code Online (Sandbox Code Playgroud)

但是,当我使用输入字段的有效值运行存储过程时,出现以下错误:

ORA-00904: "TEMP"."P_DATE": 无效标识符 …

oracle merge date ora-00904 dual-table

2
推荐指数
1
解决办法
7736
查看次数

使用oracle中的游标INSERT和UPDATE记录

我有2个表student- studLoad两个都有2个字段studIDstudName.我想将student表中的数据加载到stuLoad表中.如果studLoad表中已存在数据,则应更新它,否则应插入.以下是我的代码:

    create or replace procedure studentLoad is
v_id student.studID%type;
v_name student.studName%type;
v_sn studLoad.studName%type;
cursor cur_load is
select * from student;


begin
  open cur_load;
  loop
   fetch cur_load into v_id,v_name;

   exit when cur_load%notfound;
   select studName into v_sn from studLoad where studID = v_id;
   if(v_sn!= v_name) then
      update studLoad set studName= v_name where studID= v_id;
   else
      insert into studLoad values(v_id,v_name);
   dbms_output.put_line(v_id || ' ' || v_name);
   end if;
  end …
Run Code Online (Sandbox Code Playgroud)

sql oracle cursor

2
推荐指数
1
解决办法
11万
查看次数

根据表中列的值更新或插入

可能重复:
Oracle:如何UPSERT(更新或插入表?)

你们可以给我一个关于如何处理以下情况的建议:

Read table 2 column 1 
if value says the record exists in table 1
update table 1 record with table 2 record details
else(value says the record does not exist in table 1)
insert table 1 record with table 2 record details
Run Code Online (Sandbox Code Playgroud)

我是Oracle SQL的初学者,如果有更好的方法,请告诉我.我正在考虑使用游标来解决这个问题.

sql oracle

1
推荐指数
1
解决办法
472
查看次数

在Oracle中,我可以执行"将值插入或更新到TABLE"

我有一个包含两个数字列的表,以及对它们的唯一约束.我想插入一对新的值,除非该对已经存在.最简单的方法是什么?

如果我做

insert into TABLE values (100,200) 
Run Code Online (Sandbox Code Playgroud)

并且该对已经存在我得到ORA-00001错误,所以我想做类似的事情

insert or update into TABLE values (100,200)
Run Code Online (Sandbox Code Playgroud)

sql oracle ora-00001

0
推荐指数
1
解决办法
421
查看次数