YAS-00014 illegal conversion from VARCHAR to -

首页    知识库    常见问题    YAS-00014 illegal conversion from VARCHAR to -

【标题】错误码处理

【问题分类】执行sql 报错

【关键字】YAS-00014

【问题描述】执行含有递归CTE 的sql时,报错YAS-00014

【问题原因分析】union all 两端的数据类型不完全一致

【解决/规避方法】使用显式转换,或者使用一致的数据类型进行union。

【影响范围】-

【修复版本】-

【关联】-

-- 表结构:

drop TABLE SYS_DOC_DIRECTORY;

CREATE TABLE SYS_DOC_DIRECTORY (

        DIRECTORY_OID VARCHAR(128) NOT NULL,

        PARENT_DIRECTORY_OID VARCHAR(128),

        DIRECTORY_CODE VARCHAR(200),

        DIRECTORY_NAME VARCHAR(800),

        ORDER_SEQ INTEGER,

        DIRECTORY_DESC VARCHAR(800),

        REMARK VARCHAR(4000),

        CREATED_BY_CODE VARCHAR(80),

        CREATED_BY_NAME VARCHAR(400),

        CREATED_DATE VARCHAR(400),

        UPDATED_BY_CODE VARCHAR(80),

        UPDATED_BY_NAME VARCHAR(400),

        UPDATED_DATE VARCHAR(400),

        SYSTEM_CODE VARCHAR(40),

        CONSTRAINT CONS134241653 PRIMARY KEY (DIRECTORY_OID)

);

-- 表数据:

INSERT INTO SYS_DOC_DIRECTORY

(DIRECTORY_OID, PARENT_DIRECTORY_OID, DIRECTORY_CODE, DIRECTORY_NAME, ORDER_SEQ, DIRECTORY_DESC, REMARK, CREATED_BY_CODE, CREATED_BY_NAME, CREATED_DATE, UPDATED_BY_CODE, UPDATED_BY_NAME, UPDATED_DATE, SYSTEM_CODE)

VALUES('BB6470A80A024522901E06D04CE23A95', NULL, 'helpCenter', '帮助文档', 1, NULL, NULL, 'admin', '脚本插入', '2021-11-23 11:09:28.000', 'admin', '超级管理员', '2021-11-23 11:09:28.000', '9999');

INSERT INTO SYS_DOC_DIRECTORY

(DIRECTORY_OID, PARENT_DIRECTORY_OID, DIRECTORY_CODE, DIRECTORY_NAME, ORDER_SEQ, DIRECTORY_DESC, REMARK, CREATED_BY_CODE, CREATED_BY_NAME, CREATED_DATE, UPDATED_BY_CODE, UPDATED_BY_NAME, UPDATED_DATE, SYSTEM_CODE)

VALUES('B542698011781D71F9046A9D8F913789', 'BB6470A80A024522901E06D04CE23A95', 'helpCenter', '脚本插入', 3, NULL, NULL, 'admin', '超级管理员', '2023-01-31 11:10:02.000', 'admin', '超级管理员', '2023-01-31 16:29:59.000', '9999');

-- 报错sql:

WITH docDirectory (directory_oid, parent_directory_oid, directory_code, directory_name,

dis, directory_desc, remark, created_by_code, created_by_name, created_date, updated_by_code, updated_by_name, updated_date)

AS (SELECT * FROM (SELECT directory_oid, parent_directory_oid, directory_code, directory_name, order_seq dis, directory_desc,

remark, created_by_code, created_by_name, created_date, updated_by_code, updated_by_name, updated_date

FROM SYS_DOC_DIRECTORY

WHERE parent_directory_oid IS NULL AND SYSTEM_CODE = '9999'

UNION ALL

SELECT c.directory_oid, c.parent_directory_oid, c.directory_code, c.directory_name, c.order_seq dis, c.directory_desc, c.remark,

c.created_by_code, c.created_by_name, c.created_date, c.updated_by_code, c.updated_by_name, c.updated_date

FROM SYS_DOC_DIRECTORY c INNER JOIN SYS_DOC_DIRECTORY p ON p.directory_oid = c.parent_directory_oid) ORDER BY dis DESC),

docDirectoryDis (directory_oid, parent_directory_oid, directory_code, directory_name, dis, directory_desc, remark, created_by_code, created_by_name,

created_date, updated_by_code, updated_by_name, updated_date, order_seq, parent_directory_name)

AS (

SELECT d.directory_oid, d.parent_directory_oid, d.directory_code, d.directory_name, d.dis, d.directory_desc, d.remark,

d.created_by_code, d.created_by_name, d.created_date, d.updated_by_code, d.updated_by_name, d.updated_date, to_char(d.dis) order_seq,

NULL parent_directory_name FROM docDirectory d WHERE d.parent_directory_oid IS NULL

UNION ALL

SELECT t.directory_oid, t.parent_directory_oid, t.directory_code,

t.directory_name, t.dis, t.directory_desc, t.remark, t.created_by_code, t.created_by_name, t.created_date, t.updated_by_code, t.updated_by_name, t.updated_date,

concat(concat(td.order_seq, '_'), t.dis) order_seq,

(SELECT directory_name FROM SYS_DOC_DIRECTORY WHERE directory_oid = t.parent_directory_oid) parent_directory_name

FROM docDirectory t

INNER JOIN docDirectoryDis td ON t.parent_directory_oid = td.directory_oid)

SELECT COUNT(*) AS total FROM docDirectoryDis dis ;

 

-- 改写规避

WITH docDirectory (directory_oid, parent_directory_oid, directory_code, directory_name,

dis, directory_desc, remark, created_by_code, created_by_name, created_date, updated_by_code, updated_by_name, updated_date)

AS (SELECT * FROM (SELECT directory_oid, parent_directory_oid, directory_code, directory_name, order_seq dis, directory_desc,

remark, created_by_code, created_by_name, created_date, updated_by_code, updated_by_name, updated_date

FROM SYS_DOC_DIRECTORY

WHERE parent_directory_oid IS NULL AND SYSTEM_CODE = '9999'

UNION ALL

SELECT c.directory_oid, c.parent_directory_oid, c.directory_code, c.directory_name, c.order_seq dis, c.directory_desc, c.remark,

c.created_by_code, c.created_by_name, c.created_date, c.updated_by_code, c.updated_by_name, c.updated_date

FROM SYS_DOC_DIRECTORY c INNER JOIN SYS_DOC_DIRECTORY p ON p.directory_oid = c.parent_directory_oid) ORDER BY dis DESC),

docDirectoryDis (directory_oid, parent_directory_oid, directory_code, directory_name, dis, directory_desc, remark, created_by_code, created_by_name,

created_date, updated_by_code, updated_by_name, updated_date, order_seq, parent_directory_name)

AS (

SELECT d.directory_oid, d.parent_directory_oid, d.directory_code, d.directory_name, d.dis, d.directory_desc, d.remark,

d.created_by_code, d.created_by_name, d.created_date, d.updated_by_code, d.updated_by_name, d.updated_date, to_char(d.dis) order_seq,

'-' parent_directory_name FROM docDirectory d WHERE d.parent_directory_oid IS NULL

UNION ALL

SELECT t.directory_oid, t.parent_directory_oid, t.directory_code,

t.directory_name, t.dis, t.directory_desc, t.remark, t.created_by_code, t.created_by_name, t.created_date, t.updated_by_code, t.updated_by_name, t.updated_date,

concat(concat(td.order_seq, '_'), t.dis) order_seq,

(SELECT directory_name FROM SYS_DOC_DIRECTORY WHERE directory_oid = t.parent_directory_oid) parent_directory_name

FROM docDirectory t

INNER JOIN docDirectoryDis td ON t.parent_directory_oid = td.directory_oid)

SELECT COUNT(*) AS total FROM docDirectoryDis dis ;

浏览量:0