是不是要考察队oracle的对象编程啊,可以建立一个record,然后再建立一个存储这个record对象的表
解决方案 »
- oracle自动备份问题
- 树状结构数据的乘积怎么处理?
- 8.1.5上建基于函数的索引(FBI)失败??
- oci 编程问题
- 高分求PL/SQL脚本,谢谢(刚才没说清楚)
- ora0113--通信通道的文件结束!!!此问题是什么原因造成的?
- 如何在where中加判断?
- wrap工具的弱点吗?ORACLE遗忘的角落吗?
- 请各位大虾帮我写个SQL语句,在线等,急急急急急急急急!
- 请问,在PL/SQL里如何执行SQL语句字符串?
- 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;
/