sql - 我想用 rdbms 函数的表中的字符串更新
问题描述
我想用随机选择行的字符串更新表,rdbms
但它给了我错误ORA-00907: missing right parenthesis
。我试图找到右括号在哪里丢失但没有得到这个请帮助我关于这个我正在选择同一个表并想要更新同一个表列我所做的就是这个
UPDATE PAY_IN_OUT
SET ATT_PRESENT ='L'
WHERE EMP_CODE =
( SELECT EMP_CODE
FROM PAY_IN_OUT
ORDER BY DBMS_RANDOM.RANDOM )
WHERE rownum < 40
AND ATT_DATE BETWEEN DATE '2020-09-01' AND DATE '2021-03-31'
AND ((TO_CHAR(ATT_DATE, 'DAY'))) != 'SUNDAY';
解决方案
由于您标记了 PL/SQL,您可以尝试一种编程方法:
declare
rows_updated number := 0;
begin
for r in (
select rowid as rwd from pay_in_out sample(10)
where att_date between date '2020-09-01' and date '2021-03-31'
and to_char(att_date, 'DY', 'nls_date_language = English') != 'SUN'
for update
)
loop
update pay_in_out
set att_present = 'L'
where rowid = r.rwd;
rows_updated := rows_updated +1;
exit when rows_updated >= 40;
end loop;
end;
请注意,这sample(10)
需要表的 10% 样本。这是太小还是太大取决于表中有多少行。如果您的统计数据不是陈旧的,或者您可以计算它们,您可以查询user_tables.num_rows
以获取近似计数,然后根据指定日期范围内的非星期天数对其进行调整。
推荐阅读
- javascript - 将“正则表达式”字符串转换为 Javascript 中的实际正则表达式
- php - 库 MPDF (PHP):有时会在服务器中出现内部服务器错误 (500) 而不是 lcal
- opencv - 无法在 Python 中使用 OpenCV 将特征图写入视频
- logstash - SQL Statement on Logstash JDBC | How do i filter only on the today's inserted rows?
- python - Gnome Keybinder 未正确绑定到 XF86AudioPlay
- c# - Resharper 关闭类型提示
- serial-port - 使用 HAL_UART_Receive_IT() 和 HAL_UART_RxCpltCallback() 时会丢失字节吗?
- node.js - 如何在 Ubuntu 上安装 Mapnik
- asp.net-mvc - 尝试使用 70 个文件 SharpZipLib 时出现 System.OutOfMemoryException
- python - 在 python 中使用 Logitech C 库 - 定义结构和回调