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