Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/oracle/10.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
从DB2到Oracle PLSQL_Sql_Oracle_Db2_Locking - Fatal编程技术网

从DB2到Oracle PLSQL

从DB2到Oracle PLSQL,sql,oracle,db2,locking,Sql,Oracle,Db2,Locking,我们目前正在基于Oracle数据库构建一个应用程序。使用此应用程序,我们希望替换使用DB2数据库的现有应用程序。 有些程序是通过“for update of”语句实现的。当访问DB2时,这些工具可以正常工作。但是,如果程序访问oracle,我会收到以下错误消息: ORA-02014:无法从具有不同组的视图中选择更新 通过……等 有没有办法不处理程序就解决这个问题?有允许这样做的酒店吗?我们在linux服务器上使用ojdbc8驱动程序进行访问 从2020年1月21日开始编辑 下面是一个在访问or

我们目前正在基于Oracle数据库构建一个应用程序。使用此应用程序,我们希望替换使用DB2数据库的现有应用程序。 有些程序是通过“for update of”语句实现的。当访问DB2时,这些工具可以正常工作。但是,如果程序访问oracle,我会收到以下错误消息:

ORA-02014:无法从具有不同组的视图中选择更新 通过……等

有没有办法不处理程序就解决这个问题?有允许这样做的酒店吗?我们在linux服务器上使用ojdbc8驱动程序进行访问


从2020年1月21日开始编辑

下面是一个在访问oracle数据库时不起作用的查询示例

SELECT DBU.VIEW3.COL7, DBU.VIEW3.COL2, DBU.VIEW3.COL3, DBU.VIEW3.COL4, DBU.VIEW3.COL5, DBU.VIEW3.COL6, DBU.VIEW1.*  
FROM (
   DBU.VIEW1 LEFT JOIN DBU.VIEW2 
        ON (DBU.VIEW1.COL1=DBU.VIEW2.COL1) 
       AND (DBU.VIEW1.COL2=DBU.VIEW2.COL2) 
       AND (DBU.VIEW1.COL3=DBU.VIEW2.COL3)
  ) 
  LEFT JOIN DBU.VIEW3 ON DBU.VIEW3.COL7=DBU.VIEW2.COL7 
WHERE DBU.VIEW1.COL2='VALUE1' 
  AND DBU.VIEW1.COL3='VALUE2' 
  AND DBU.VIEW1.COL1='VALUE3' 
  AND DBU.VIEW1.COL4='VALUE4' 
  AND DBU.VIEW1.COL5='VALUE5' 
FOR UPDATE OF COL6

提前感谢

Oracle允许按视图更新表,包括“可更新视图”。实际上,视图应该满足一些条件来启用更新操作,应该有:
-视图定义中没有明确的子句,
-视图定义中没有分组依据操作


您的错误代码可能指向这种不可更新的视图。

可能需要更改代码,但您的问题没有任何有用的信息提供具体建议。错误消息似乎有意义。显示故障选择。对于更新问题,锁定表中的特定行。听起来您的查询不允许Oracle确定需要锁定哪些行。我不知道这在DB2中是如何工作的,但您必须为Oracle重新编写查询。抱歉。如果您想问“如何修复出现此错误的代码?”则需要在问题中包含一个示例,其中包含您尝试运行的源代码的最小示例。如果您问“这个错误是什么意思?”那么这是不言自明的-在查询无法获取对行的引用以锁定行的视图中(即当您聚合行时),您不能使用
进行更新
。下面是一个示例:选择DBU.VIEW3.COL7、DBU.VIEW3.COL2、DBU.VIEW3.COL3、DBU.VIEW3.COL4、DBU.VIEW3.COL5,DBU.VIEW3.COL6,DBU.VIEW1.*FROM(DBU.VIEW1.COL1左连接DBU.VIEW2开(DBU.VIEW1.COL1=DBU.VIEW2.COL1)和(DBU.VIEW1.COL2=DBU.VIEW2.COL2)以及(DBU.VIEW1.COL3=DBU.VIEW2.COL3))左键连接DBU.VIEW3.COL7=DBU.VIEW2.COL7上的DBU.VIEW3,其中DBU.VIEW1.COL2='VALUE1'和DBU.VIEW1.COL3='VALUE2'以及DBU.VIEW1.COL4='VALUE4'和DBU.VIEW1.COL5='VALUE5'用于COL6的更新该问题特别是关于ORA-02014的,它与使用FOR UPDATE子句修改的查询有关。在此上下文中,错误消息中提到的“视图”很可能是一个内联视图(也称为派生表)。例如,如果查询具有内联视图以使用ROWNUM应用过滤器,则会出现此错误。简言之,你的答案没有错,但还不够完整,不足以提供真正的帮助。