S02054

错误代码

S02054

报错信息

Can't modify read only table. RefId: S02054

错误原因

当删除、更新或插入只读表的数据时,会出现该报错,见下例:


def createMyTable(n) {
    intv = take(1..10, n)
    symbol = take(`a`b`c, n)
    id = rand(100, n)
    strv = take("abs" + string(1..10), n)
    doublev = rand(10.0, n)
    return table(intv, strv, doublev, id, symbol)
}
// 建表
n = 100
t = createMyTable(n)

// 共享表, 设置为只读
share(t, `shareReadOnlyTable, readonly=true)
delete from shareReadOnlyTable where id = 1 // 报错

// 共享表,可写
share(t, `shareTable, readonly=false)
delete from shareTable where id = 1 // 正常

// 拷贝
share(t, `shareReadOnlyTable, readonly=true)
copyT = select * from shareReadOnlyTable;
delete from copyT where id = 1 // 正常

解决办法

  1. 在创建表的时候设为可写,即将 readonly 设置为 false。
  2. 如果不想修改原表的可读属性且表数据较少,可以通过 select 语句拷贝一份表数据,再对拷贝后的内存表进行操作。