是不是要考察队oracle的对象编程啊,可以建立一个record,然后再建立一个存储这个record对象的表
解决方案 »
- 菜鸟求救:用substr截取出的字符串如何比较
- PL/SQL导入dmp文件能导入现有表空间没有新表么?
- UNIX下的线程与ORACLE数据库的连接问题,在线等待!!
- 两个SELECT语句执行后产生两个结果集,想将这两个结果集合并成一个结果集
- 行列转换问题
- substr用法
- 在线等!!oracle 9i中的一个简单命令,DX帮忙
- 求教一个存储过程的内容
- 使用sqlldr导入,原始文本中有繁体的“啟”,导入不成功,如何做?
- 如何按某一字段内容把一个表拆分成多个表?
- select (a+b+c)/3 as d from table 如何控制计算所得数值的小数位数?
- 为什么启动oracle是我必须要在DBA STUDIO里面一SYSTEM AS SYSDBA身份启动??
as
begin
dbms_output.put_line(lpad(' ',p_level*2,' ')||p_start);
for c in (select * from aa a where exists(select 1 from aa b where b.fid=p_start and b.id=a.id) order by id) loop
p_recursion(c.id,p_level+1);
end loop;
end;
/SQL> select * from aa;ID FID
-- ---
1 0
2 1
3 1
4 2
5 3
6 4
6 57 rows selectedSQL> exec p_recursion('1');
1
2
4
6
6
3
5
6
6测试还有少少出了错,最后一行多了一个6
as
begin
dbms_output.put_line(lpad(' ',p_level*2,' ')||p_start);
for c in (select * from aa a where exists(select 1 from aa b where b.fid=p_start and b.fid=a.fid) order by id) loop
p_recursion(c.id,p_level+1);
end loop;
end;
/
SQL> exec p_recursion('1');
1
2
4
6
3
5
6测试通过
所以我们都不用递归来解决类士问题,不知道ORACLE是否有这种限制?
题目要求不用游标呀
CREATE OR REPLACE PROCEDURE GetSubEmp2(IN_X VARCHAR2)
IS
V_SQL VARCHAR2(200);
V_COUNT NUMBER;
V_STR VARCHAR2(200);
V_INSTR VARCHAR2(200);
BEGIN
V_SQL:='SELECT COUNT(*) TCOUNT FROM EMP WHERE MGR IN ('|| IN_X ||')';
EXECUTE immediate V_SQL INTO V_COUNT;
--IN_X:='';
V_INSTR:='';
WHILE V_COUNT>0 LOOP
V_SQL:='SELECT EMPNO FROM EMP WHERE MGR IN ('||IN_X||
') AND ROWNUM<'||TO_CHAR(V_COUNT+1)
||' MINUS SELECT EMPNO FROM EMP WHERE MGR IN ('||IN_X||') AND ROWNUM <'||TO_CHAR(V_COUNT);
EXECUTE immediate V_SQL INTO V_STR;
IF V_INSTR ='' OR V_INSTR IS NULL THEN
V_INSTR:=V_STR ;
ELSE V_INSTR:=V_INSTR || ',' || V_STR ;
END IF;
V_COUNT:=V_COUNT-1;
END LOOP;
DBMS_OUTPUT.PUT_LINE(V_INSTR);
IF V_INSTR IS NOT NULL THEN
GetSubEmp2(V_INSTR);
END IF;
END GetSubEmp2;
/