首页 > 解决方案 > 我想用 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';

标签: sqloracleplsql

解决方案


由于您标记了 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以获取近似计数,然后根据指定日期范围内的非星期天数对其进行调整。


推荐阅读