Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/334.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
Java SQL合并以更新值或将值插入到同一个表中_Java_Sql_Oracle_Jdbc_Merge - Fatal编程技术网

Java SQL合并以更新值或将值插入到同一个表中

Java SQL合并以更新值或将值插入到同一个表中,java,sql,oracle,jdbc,merge,Java,Sql,Oracle,Jdbc,Merge,好吧,我得到了一个缺少关键字的错误,而且不知道究竟是什么,还有没有其他方法可以让它不那么笨拙 非常感谢您的帮助。问题在于您的合并语法不正确。您的声明采用以下形式: "MERGE INTO NT_PROPERTY ntProp USING ( " + "SELECT * FROM NT_PROPERTY ) " + "VALUES " +

好吧,我得到了一个缺少关键字的错误,而且不知道究竟是什么,还有没有其他方法可以让它不那么笨拙


非常感谢您的帮助。

问题在于您的合并语法不正确。您的声明采用以下形式:

"MERGE INTO NT_PROPERTY ntProp USING ( "  +
                            "SELECT * FROM NT_PROPERTY ) " +
                            "VALUES " +
                                    "('minDPTObjectId'," + minDPTObjectId + ", 'Starting DPT Object Id') " +
                                    "('maxDPTObjectId', " + maxDPTObjectId + ", 'Ending DPT Object Id') " +
                            "vt (NAME, VALUE, NOTE) " +
                            "ON ( ntProp.NAME = vt.NAME ) " +
                            "WHEN MATCHED THEN " +
                            "UPDATE SET VALUE = vt.VALUE "+
                            "WHEN NOT MATCHED THEN " +
                            "INSERT (NAME, VALUE, NOTE) VALUES (vt.NAME, vt.VALUE, vt.NOTE)";
但其形式应为:

MERGE INTO nt_property ntprop
  USING (SELECT * FROM nt_property)
    VALUES (...)
    vt (...)
  ON (ntprop.name = vt.name)
WHEN MATCHED THEN
  UPDATE ...
WHEN NOT MATCHED THEN
  INSERT ...;

为什么在using子句和on子句之间有VALUES和vt子句?这是错误的语法。此外,虽然您可以在using子句中使用select*from tablename,但您可以直接使用tablename,因为您正在选择所有列和所有行。

什么类型的MindPtoObjectId和MaxdPtoObjectId int或varchar?只需将打印查询放在末尾,而不是执行,然后将结果复制到另一个选项卡中,查看其外观。使用SELECT*FROM NT_属性值'MindPtoObjectId',9500002785,合并到NT_属性ntProp,'开始DPT对象Id''maxDPTObjectId',9500002786',结束DPT对象Id'vt名称,值,ntProp上的注释。匹配时,名称=vt.NAME,然后更新设置值=vt.VALUE。不匹配时,插入名称,值,注释值vt.NAME,vt.VALUE,注释@NenadZivkovic@DeepanshuMannFROM nt_属性值之后出现语法错误。请首先确保select查询正确。请首先在Oracle客户端SQL*Plus、TOAD、sqlcli中编写正确的合并语句,无论您需要做什么。一旦语法正确,就可以将其转换为JDBC程序。
MERGE INTO target_table tgt_alias
  USING source_table_or_subquery src_alias
    ON (<JOIN conditions>)
WHEN MATCHED THEN
  UPDATE ...
WHEN NOT MATCHED THEN
  INSERT ...;
  MERGE INTO NT_PROPERTY D  
      USING (SELECT * FROM DUAL ) S  
      ON (D.NAME = 'minDPTObjectId')  
      WHEN MATCHED THEN UPDATE SET D.VALUE =   '1234' 
      WHEN NOT MATCHED THEN INSERT (NAME, VALUE, NOTE) 
      VALUES ('maxDPTObjectId', '1111', 'Ending DPT Object Id') ;