Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/71.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_Database_Oracle_Sql Update - Fatal编程技术网

Sql Oracle中的更新

Sql Oracle中的更新,sql,database,oracle,sql-update,Sql,Database,Oracle,Sql Update,我需要更新表中的comments字段,以获得大量客户ID列表。注释需要更新以包含现有注释,并附加一些文本和另一个表中的密码。我不太清楚怎么做 这里有一些代码可以对单个客户id执行此操作。对于超过100个客户id的列表,我将如何执行此操作?我的第一个想法是创建一个临时表,并将所有客户id放在其中,但我仍然不确定之后如何编码,因为客户id在查询中使用了两次 Update Contract SET Contract_Comment= Contract_Comment || '; 12/29/2008

我需要更新表中的comments字段,以获得大量客户ID列表。注释需要更新以包含现有注释,并附加一些文本和另一个表中的密码。我不太清楚怎么做

这里有一些代码可以对单个客户id执行此操作。对于超过100个客户id的列表,我将如何执行此操作?我的第一个想法是创建一个临时表,并将所有客户id放在其中,但我仍然不确定之后如何编码,因为客户id在查询中使用了两次

Update Contract
SET Contract_Comment= Contract_Comment || '; 12/29/2008 Password `' ||
(SELECT Password FROM WLogin WHERE default_customer_id='1234' ) ||'`'|| ' reinstated per Mickey Mouse;'
WHERE Customer_id='1234'

好吧,假设合同注释有一个客户id,或者很容易连接到一个有客户id的表中

update contract c
set contract_comment = contract_comment || '; 12/29/2008 Password ' ||
(select password from WLogin w where w.default_customer_id = c.customer_id) ||''|| ' reinstated per Mickey Mouse;' WHERE Customer_id in (1234, 4567).
或者,将末尾的列表替换为另一个子选择


其中客户id在中选择客户id自

我同意托德所说的一切,并希望补充以下内容

虽然这可能并不明显,但他也可能纠正了您发布的另一个错误,即将customer_id字段视为字符串

至少在您的示例中,通过将id置于引号内,您迫使Oracle在比较之前将所有行转换为字符串,或者将您提供的id转换为整数—我必须进行实验以确定将应用的实际规则

无论哪种方式,最好与您的数据类型保持一致,而不是让数据库来解决它


您声明提供的代码是针对单个客户的。如果在循环中部署此代码,请确保使用绑定变量,而不是将客户id连接到正在生成的SQL语句中。如果您使用PL/SQL执行此操作,那么它就为您完成了—在Java或其他语言中,您必须自己执行此操作。

如果您将ID存储在临时表中,则使用in或EXISTS子句可以很好地回答上述问题。我只想对其进行如下增强:

UPDATE contract c
   SET contract_comment = nvl2(contract_comment, contract_comment || '; ', '') || '12/29/2008 Password ' ||
                          NVL((SELECT PASSWORD
                                FROM wlogin p
                               WHERE p.default_customer_id = c.customer_id),
                              '<NULL>') || '' || ' reinstated per Mickey Mouse'
 WHERE EXISTS (SELECT 'x' FROM wlogin l WHERE l.default_customer_id = c.customer_id)
感谢您对这些正确答案的评价


您的问题不清楚默认客户id和客户id是否相同。你能解释一下你在这里使用的模式吗?而且,这看起来是一次性的,而不是应用程序中反复使用的更新。如果不是一次性使用,请确保在使用嵌套子查询或联接时检查查询计划。
AND EXISTS (SELECT 'y' FROM temp_ids_table t WHERE t.customer_id = c.customer_id)