我正在尝试使用REGEXP_SUBSTR
更新表格中的列,但我收到错误,缺少表达式。
UPDATE p_table SET f_name = SELECT REGEXP_SUBSTR ( (SELECT user_name
FROM user_info
WHERE ROWID = R_ID ('user_info')), '[^ ]{1,15}', 1, 1)
FROM DUAL;
当我在第一个选择之前添加括号并且在双重之后它会起作用但是将该列中的所有行设置为相同的值。我并不需要它们都是独一无二的,但我不能让它们都一样。谢谢你能给我的任何建议。
UPDATE p_table SET f_name = (SELECT REGEXP_SUBSTR ( (SELECT user_name
FROM user_info
WHERE ROWID = R_ID ('user_info')), '[^ ]{1,15}', 1, 1)
FROM DUAL);
答案 0 :(得分:2)
正如@PatrickMarchand中提到的那样,Oracle会优化查询,因此您的函数只调用一次。 AskTom article表明了这一点。
要获得解决方法,必须将与p_table行链接的内容引入函数参数,以强制Oracle为每一行调用它。
例如rowid
中的p_table
:
UPDATE p_table
SET f_name = (
SELECT
REGEXP_SUBSTR(
( SELECT user_name FROM user_info
WHERE ROWID = R_ID ('user_info', p_table.rowid)
),
'[^ ]{1,15}', 1, 1
)
FROM DUAL
)
答案 1 :(得分:0)
没有子查询,它能做你想要的吗?
UPDATE p_table
SET f_name = (SELECT REGEXP_SUBSTR(user_name, '[^ ]{1,15}', 1, 1)
FROM user_info
WHERE ROWID = R_ID ('user_info')
);