【问题标题】:Using Oracle CLOB value inside MERGE在 MERGE 中使用 Oracle CLOB 值
【发布时间】:2018-11-23 15:58:27
【问题描述】:

我尝试使用此查询在表之间复制值:

MERGE INTO workflow W
   USING ( 
       SELECT distinct pr.workflow_id, pr.name, pr.description FROM workflow_revision pr, workflow pw WHERE pw.id = pr.workflow_id 
   )WR
   ON ( W.id = WR.workflow_id )
   WHEN MATCHED THEN
   UPDATE SET W.name = WR.name, W.description = WR.description

但它给出了以下错误:ORA-00932: inconsistent datatypes: expected - got CLOB

当从查询中删除该 description 列时,它可以正常工作。这是一个长文本

我只是不知道如何解决这个问题。你能帮帮我吗?


由于@eaolson 要求表格的布局,我给出了原始屏幕截图:


@Lukasz Szozda 提交后,我将此作为答案:

MERGE INTO workflow W
USING (
   SELECT workflow_id, name, (CAST (description AS VARCHAR2(4000))) AS description FROM workflow_revision
)WR
ON (W.id = WR.workflow_id)
WHEN MATCHED THEN
UPDATE SET W.name = WR.name, W.description = WR.description;

但正如他也警告过的那样;这是一个可接受的答案,只要描述列长度最大 4000(或您在其中给出的值)是。

【问题讨论】:

    标签: oracle clob sql-merge


    【解决方案1】:

    不需要JOIN:

    MERGE INTO workflow W
    USING (SELECT workflow_id, name, description FROM workflow_revision)WR
       ON (W.id = WR.workflow_id)
    WHEN MATCHED THEN
    UPDATE SET W.name = WR.name, W.description = TO_LOB(WR.description);
    

    【讨论】:

    • 它仍然给出错误ORA-00932: inconsistent datatypes: expected - got CLOB
    • @KorkiKorkig 请尝试:W.description = TO_LOB(WR.description)
    • 不幸的是遇到了同样的错误。也试过TO_LOB(description) AS description以上
    • 这对我有用,你能显示你的表定义吗?
    • @KorkiKorkig 只要您的描述最多包含 4000 个字符,那么可以。
    猜你喜欢
    • 1970-01-01
    • 2012-05-08
    • 2015-06-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-01-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多