实施 REGEXP_SUBSTR 困难

发布于 2024-08-11 05:18:44 字数 941 浏览 7 评论 0原文

我正在 Oracle 10g 上运行 SQL 查询。我有两个表(下面提供的示例数据)。我正在尝试提取一些字段 从表 t2 中获取并更新表 t1 中的空列。我遇到以下错误:

ORA 01722:无效数字(指向 REGEXP_SUBSTR

我知道这是因为非数字数据(例如“NO code {..”) .} " ) 在我的表中,我尝试使用 REGEXP_SUBSTR* 表达式提取 我想知道是否有人可以建议我一些替代实现来帮助我“复制整个字符串”而不是抛出异常。

MERGE
INTO    temptab t1
USING   directory_list t2
ON      (REGEXP_SUBSTR(codelist, '[^.]+', 1) = t2.tcode)
WHEN MATCHED THEN
UPDATE
SET    t1.tcode = t2.tcode,
       t1.des   = t2.des

temptab t1

Codelist          | T1.tcode   | T1.des
1111.1.803.12.X.Z 
1000.2.3232.145.M.P        
300.12.2982.45.X.Y         
NO code {...}  
1111.1.803.12.X.Z

directory_list t2
    tcode              |   DES
    1000           | powervalue100
    300                | powermax300
    20                 | powermin20
    NO code {...}      | maxvalue plus
    1000           | powervalue100

谢谢,

新手

I'm running SQL queries on Oracle 10g. I have two tables ( sample data provided below ). i'm trying to extract some fields
from Table t2 and update the empty columns in table t1. I'm encountering the following error:

ORA 01722: Invalid Number ( pointing to REGEXP_SUBSTR )

I understand this is because of non - numeric data ( like " NO code {...} " ) in my table, that I'm trying to extract using the REGEXP_SUBSTR* Expression
I was wondering if someone can suggest me some alternative implementations to help me "copy the entire string" instead of throwing an exception.

MERGE
INTO    temptab t1
USING   directory_list t2
ON      (REGEXP_SUBSTR(codelist, '[^.]+', 1) = t2.tcode)
WHEN MATCHED THEN
UPDATE
SET    t1.tcode = t2.tcode,
       t1.des   = t2.des

temptab t1

Codelist          | T1.tcode   | T1.des
1111.1.803.12.X.Z 
1000.2.3232.145.M.P        
300.12.2982.45.X.Y         
NO code {...}  
1111.1.803.12.X.Z

directory_list t2
    tcode              |   DES
    1000           | powervalue100
    300                | powermax300
    20                 | powermin20
    NO code {...}      | maxvalue plus
    1000           | powervalue100

Thanks,

Novice

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

肩上的翅膀 2024-08-18 05:18:44

您可以使用 CASE 来检测何时没有“.”。在代码表中。

MERGE
INTO    temptab t1
USING   directory_list t2
ON      (CASE WHEN INSTR(codelist,'.') = 0 THEN codelist
              ELSE REGEXP_SUBSTR(codelist, '[^.]+', 1)
         END = t2.tcode)
WHEN MATCHED THEN
UPDATE
SET    t1.tcode = t2.tcode,
       t1.des   = t2.des

You could use CASE to detect when there's no "." in codelist.

MERGE
INTO    temptab t1
USING   directory_list t2
ON      (CASE WHEN INSTR(codelist,'.') = 0 THEN codelist
              ELSE REGEXP_SUBSTR(codelist, '[^.]+', 1)
         END = t2.tcode)
WHEN MATCHED THEN
UPDATE
SET    t1.tcode = t2.tcode,
       t1.des   = t2.des
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文