我想对来自 Java 的 Oracle 9i 数据库运行如下查询(下面是示例表结构和示例数据)。
选择部门号
, SUBSTR(comma_list, 2) comma_list
从(选择部门号
, SYS_CONNECT_BY_PATH(ename, ',') comma_list
, 行号
, 行数
从(选择部门号
, 姓名
, ROW_NUMBER()OVER(PARTITION BY deptno
ORDER BY empno) row_number
, COUNT(*)OVER(PARTITION BY deptno) row_count
来自 wd_emp)
从 row_number = 1 开始
通过 deptno 连接 = 先前的 deptno
AND row_number = PRIOR row_number + 1)
WHERE row_number = row_count;
这工作正常。但是,如果构建 comma_list 的 sys_connect_by_path 达到 varchar2 4000 个字符的限制,那么我会收到“ORA-01489:字符串连接的结果太长”错误。
是否有人对如何克服此限制有任何建议,以便我的串联可以超过 4000 个字符?
表格和示例数据:
CREATE TABLE WD_DEPT(DEPTNO NUMBER(2) CONSTRAINT PK_DEPT PRIMARY KEY
,DNAME VARCHAR2(14)
,LOC VARCHAR2(13));
CREATE TABLE WD_EMP(EMPNO NUMBER(4) CONSTRAINT PK_EMP PRIMARY KEY
,ENAME VARCHAR2(10)
,JOB VARCHAR2(10)
,经理编号(4)
,雇用日期
,SAL 编号(7,2)
,DEPTNO NUMBER(2) 约束 FK_DEPTNO 参考 WD_DEPT);
INSERT INTO WD_DEPT VALUES(10,'TEAM GREGORY','TABLE 3');
插入 WD_DEPT 值(20,'TEAM HANLEY','表 2');
INSERT INTO WD_DEPT VALUES(30,'TEAM OFFIAH','TABLE 4');
INSERT INTO WD_DEPT VALUES(40,'TEAM BOTICA','TABLE 1');
INSERT INTO WD_DEPT VALUES(50,'TEAM SKERRETT','TABLE 4');
INSERT INTO WD_DEPT VALUES(60,'TEAM McGINTY','TABLE 1');
INSERT INTO WD_DEPT VALUES(70,'EMPTY TEAM','NO TABLE');
插入 WD_EMP 值(11,'GREGORY','TEAM LEAD',28,to_date('18-JAN-2000','DD-MON-RRRR'),800,10);
插入 WD_EMP 值(12,'BELL', 'DEVELOPER', 11, to_date('17-JAN-2000', 'DD-MON-RRRR'), 600, 10);
插入 WD_EMP 值(13,'CLARKE', 'DEVELOPER', 11, to_date('16-JAN-2000', 'DD-MON-RRRR'), 600, 10);
插入 WD_EMP 值(14,'HANLEY','团队领导',28,to_date('15-JAN-2000','DD-MON-RRRR'),800,20);
插入 WD_EMP 值(15,'BETTS', 'CONTRACTOR', 14, to_date('14-JAN-2000', 'DD-MON-RRRR'), 700, 20);
插入 WD_EMP 值(16,'MILES', 'CONTRACTOR', 14, to_date('13-JAN-2000', 'DD-MON-RRRR'), 700, 20);
插入 WD_EMP 值(17,'HAMPSON','DEVELOPER',14,to_date('12-JAN-2000','DD-MON-RRRR'),600,20);
插入 WD_EMP 值(18,'PRESTON', 'DEVELOPER', 14, to_date('11-JAN-2000', 'DD-MON-RRRR'), 600, 20);
插入 WD_EMP 值(19,'OFFIAH','团队领导',28,to_date('10-JAN-2000','DD-MON-RRRR'),800,30);
插入 WD_EMP 值(20,'PLATT', 'DEVELOPER', 19, to_date('09-JAN-2000', 'DD-MON-RRRR'), 600, 30);
插入 WD_EMP 值(21,'POTTER','DEVELOPER',19,to_date('08-JAN-2000','DD-MON-RRRR'),600,30);
插入 WD_EMP 值(22,'CASE', 'DEVELOPER', 19, to_date('07-JAN-2000', 'DD-MON-RRRR'), 600, 30);
插入 WD_EMP 值(23,'BOTICA','团队领导',28,to_date('06-JAN-2000','DD-MON-RRRR'),800,40);
插入 WD_EMP 值(24,'GILL', 'DEVELOPER', 23, to_date('05-JAN-2000', 'DD-MON-RRRR'), 600, 40);
插入 WD_EMP 值(25,'SKERRETT','团队领导',28,to_date('04-JAN-2000','DD-MON-RRRR'),800,50);
插入 WD_EMP 值(26,'McGINTY','TEAM LEAD',28,to_date('03-JAN-2000','DD-MON-RRRR'),800,60);
插入 WD_EMP 值(27,'LOWE','MANAGER',28,to_date('02-JAN-2000','DD-MON-RRRR'),900,NULL);
插入 WD_EMP 值(28,'MONIE','MANAGER',NULL,to_date('01-JAN-2000','DD-MON-RRRR'),1000,NULL);