我想运行类似下面针对从Java的Oracle 9i数据库的查询(一个例子的表结构和示例性数据是下文)。甲骨文SYS_CONNECT_BY_PATH击中4000字符的限制
SELECT deptno , SUBSTR(comma_list, 2) comma_list FROM (SELECT deptno , SYS_CONNECT_BY_PATH(ename, ',') comma_list , row_number , row_count FROM (SELECT deptno , ename , ROW_NUMBER()OVER(PARTITION BY deptno ORDER BY empno) row_number , COUNT(*)OVER(PARTITION BY deptno) row_count FROM wd_emp) START WITH row_number = 1 CONNECT BY deptno = PRIOR 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) ,MGR NUMBER(4) ,HIREDATE DATE ,SAL NUMBER(7,2) ,DEPTNO NUMBER(2) CONSTRAINT FK_DEPTNO REFERENCES WD_DEPT); INSERT INTO WD_DEPT VALUES(10,'TEAM GREGORY','TABLE 3'); INSERT INTO WD_DEPT VALUES(20,'TEAM HANLEY','TABLE 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'); INSERT INTO WD_EMP VALUES(11,'GREGORY', 'TEAM LEAD', 28, to_date('18-JAN-2000', 'DD-MON-RRRR'), 800, 10); INSERT INTO WD_EMP VALUES(12,'BELL', 'DEVELOPER', 11, to_date('17-JAN-2000', 'DD-MON-RRRR'), 600, 10); INSERT INTO WD_EMP VALUES(13,'CLARKE', 'DEVELOPER', 11, to_date('16-JAN-2000', 'DD-MON-RRRR'), 600, 10); INSERT INTO WD_EMP VALUES(14,'HANLEY', 'TEAM LEAD', 28, to_date('15-JAN-2000', 'DD-MON-RRRR'), 800, 20); INSERT INTO WD_EMP VALUES(15,'BETTS', 'CONTRACTOR', 14, to_date('14-JAN-2000', 'DD-MON-RRRR'), 700, 20); INSERT INTO WD_EMP VALUES(16,'MILES', 'CONTRACTOR', 14, to_date('13-JAN-2000', 'DD-MON-RRRR'), 700, 20); INSERT INTO WD_EMP VALUES(17,'HAMPSON', 'DEVELOPER', 14, to_date('12-JAN-2000', 'DD-MON-RRRR'), 600, 20); INSERT INTO WD_EMP VALUES(18,'PRESTON', 'DEVELOPER', 14, to_date('11-JAN-2000', 'DD-MON-RRRR'), 600, 20); INSERT INTO WD_EMP VALUES(19,'OFFIAH', 'TEAM LEAD', 28, to_date('10-JAN-2000', 'DD-MON-RRRR'), 800, 30); INSERT INTO WD_EMP VALUES(20,'PLATT', 'DEVELOPER', 19, to_date('09-JAN-2000', 'DD-MON-RRRR'), 600, 30); INSERT INTO WD_EMP VALUES(21,'POTTER', 'DEVELOPER', 19, to_date('08-JAN-2000', 'DD-MON-RRRR'), 600, 30); INSERT INTO WD_EMP VALUES(22,'CASE', 'DEVELOPER', 19, to_date('07-JAN-2000', 'DD-MON-RRRR'), 600, 30); INSERT INTO WD_EMP VALUES(23,'BOTICA', 'TEAM LEAD', 28, to_date('06-JAN-2000', 'DD-MON-RRRR'), 800, 40); INSERT INTO WD_EMP VALUES(24,'GILL', 'DEVELOPER', 23, to_date('05-JAN-2000', 'DD-MON-RRRR'), 600, 40); INSERT INTO WD_EMP VALUES(25,'SKERRETT', 'TEAM LEAD', 28, to_date('04-JAN-2000', 'DD-MON-RRRR'), 800, 50); INSERT INTO WD_EMP VALUES(26,'McGINTY', 'TEAM LEAD', 28, to_date('03-JAN-2000', 'DD-MON-RRRR'), 800, 60); INSERT INTO WD_EMP VALUES(27,'LOWE', 'MANAGER', 28, to_date('02-JAN-2000', 'DD-MON-RRRR'), 900, NULL); INSERT INTO WD_EMP VALUES(28,'MONIE', 'MANAGER', NULL, to_date('01-JAN-2000', 'DD-MON-RRRR'), 1000, NULL);
我需要连接在一起,一切要基于文件的接口上发送。就像你说的那样,我可以拉多行,迭代Java中的连接并进行连接。但是我想知道我是否可以一举将这一切完成。 – 2009-05-01 10:29:37