对于我的项目,我使用rdbms实现链表。链表使用rowid列作为指针,包含先验、下一个和所有者指针(来自不同的表)。
简单的例子如下:
CREATE TABLE EMPLOYEE
(
EMP_ID NUMBER(4) NOT NULL,
OFFICE_CODE CHAR(2),
OFF_EMP_prior ROWID,
OFF_EMP_next ROWID,
OFF_EMP_owner ROWID
);
{EMP1,(NULL,EMP2,OFF1)} - {EMP2,(EMP1,EMP3,OFF1)} - {EMP3,(EMP2,NULL,OFF1)}
现在我必须实现一个检索函数,如"查找'n(整数)'的列表条目,其中'OFF1'作为所有者"。
这可以简单地通过使用loop遍历链表来完成。但是对于一次检索,这需要太多的SQL操作。(我知道使用序列号可以是另一种选择,但这是迄今为止做出的决定。)
相反,我在oracle SQL中找到了SELECT - CONNECTED BY
,并尝试
select * from EMPLOYEE
where OFF_EMP_owner = [OFF_ROWID]
connect by nocycle OFF_EMP_prior = rowid;
这个查询用于检索列表的条目,但结果的顺序不像我预期的那样(像EMP3-EMP1-EMP2
)。
是否有可能检索链表的条目并按SELECT-CONNECT BY'
列表的顺序对它们进行排序?还是存在更合适的SQL?
select * from EMPLOYEE
where DEPT_EMPLOYEE_owner = [OWNER_ROWID}
start with OFF_EMP_prior is NULL
connect by OFF_EMP_prior = prior rowid;
用上面的查询解决了问题。'prior'应该代替nocycle