Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 如果Oracle上不存在用于插入或更新的_Sql_Oracle_If Statement - Fatal编程技术网

Sql 如果Oracle上不存在用于插入或更新的

Sql 如果Oracle上不存在用于插入或更新的,sql,oracle,if-statement,Sql,Oracle,If Statement,我想插入一行,如果该行不存在,如果它存在,我想更新该行。我目前正在使用PLSql Oracle。 当我想写这样的查询时 IF NOT EXIST (SELECT * FROM TABLE_NAME WHERE ID=1) INSERT INTO TABLE_NAME(ID,NAME)VALUES(1,'CAGDAS SANCARBARLAZ') ELSE UPDATE TABLE_NAME SET NAME='UGUR CAN' WHERE ID=1 如何在Oracle Sql中

我想插入一行,如果该行不存在,如果它存在,我想更新该行。我目前正在使用PLSql Oracle。 当我想写这样的查询时

IF NOT EXIST (SELECT * FROM TABLE_NAME WHERE ID=1)
   INSERT INTO TABLE_NAME(ID,NAME)VALUES(1,'CAGDAS SANCARBARLAZ')
ELSE
   UPDATE TABLE_NAME SET NAME='UGUR CAN' WHERE ID=1

如何在Oracle Sql中做到这一点?

用于此

MERGE INTO TABLE_NAME T
   USING (SELECT 1 ID from dual) S
   ON (T.ID = S.ID)
   WHEN MATCHED THEN UPDATE SET T.NAME='UGUR CAN'
   WHEN NOT MATCHED THEN INSERT (ID, NAME) VALUES (1, 'CAGDAS SANCARBARLAZ');

使用
MERGE
语句。提供常量值有点混乱,因为Oracle不支持标准值构造函数,所以需要使用
SELECT。。。对于MERGE语句的源,请从DUAL

merge into table_name
using (
  select 1 as id, 'CAGDAS SANCARBARLAZ' as name from dual
) t on t.id = table_name.id
when matched then update
   set name = 'UGUR CAN'
when not matched then insert (id, name) values (t.id, t.name);

我们可以使用合并所需的列名吗?为什么在更新和插入中对
名称使用不同的值?