这个要求像是买面粉,要精面,入口即化的。你拿的还不是钱,是分... 而且你还没给出测试数据的脚本,还要别人自己建表插入数据随手写的,相信我就试试,不相信可以无视 select superid,supername,level from test_func start with code='xxxx' connect by prior superid=code这个表设计得不太合理,superName字段可以不要
13 rows selected create or replace procedure test_func(t_code varchar2) is Cursor c is select distinct superid,supername,level from test connect by prior superid = code start with code = t_code; begin for c1 in c loop dbms_output.put_line(c1.superid || ' ' || c1.supername || ' ' || c1.level); end loop; end ; SQL> set serveroutput on; SQL> exec test_func('000003');
000 北京一小学 1 0 北京市教育局 2
Select a.superId,a.superName where test_func a a.code not in( select b.code from test_func b connect by b.code = b.superId start with b.code = 输入的code )
SQL> CREATE OR REPLACE FUNCTION test_func 2 (pi_code IN VARCHAR2) 3 RETURN SYS_REFCURSOR 4 IS 5 po_result SYS_REFCURSOR; 6 BEGIN 7 OPEN po_result FOR 8 SELECT superid,supername FROM test 9 START WITh code=pi_code 10 CONNECT BY PRIOR superid=code; 11 RETURN po_result; 12 END; 13 /函数已创建。SQL> select test_func('000001303') from dual;TEST_FUNC('000001303 -------------------- CURSOR STATEMENT : 1CURSOR STATEMENT : 1SUPERID SUPERNAME ---------------- -------------------------------- 000003 三年级 000 北京一小学 0 北京市教育局 SQL>
我调试那函数 CREATE OR REPLACE FUNCTION test_func (pi_code IN VARCHAR2) RETURN SYS_REFCURSOR IS po_result SYS_REFCURSOR; BEGIN OPEN po_result FOR SELECT superid,supername FROM test START WITh code=pi_code CONNECT BY PRIOR superid=code; 11 RETURN po_result; 12 END; 结果没也来呢!请指教 我编辑那函数后 用select test_func('000001101') from dual;后出现 test_view('000001101') <Cursor>
我调试那函数 CREATE OR REPLACE FUNCTION test_func (pi_code IN VARCHAR2) RETURN SYS_REFCURSOR IS po_result SYS_REFCURSOR; BEGIN OPEN po_result FOR SELECT superid,supername FROM test START WITh code=pi_code CONNECT BY PRIOR superid=code; RETURN po_result; END; 结果没也来呢!请指教 我编辑那函数后 用select test_func('000001101') from dual;后出现 test_func('000001101') <Cursor>
CREATE OR REPLACE FUNCTION test_func (pi_code IN VARCHAR2) RETURN SYS_REFCURSOR IS po_result SYS_REFCURSOR; BEGIN OPEN po_result FOR SELECT superid,supername FROM test START WITh code=pi_code CONNECT BY PRIOR superid=code; RETURN po_result; END; 兄弟的代码我有些地方不懂,这里start with code=pi_code connect by prior superid=code 分别是什么意思啊?能否指点下,听听你的思路!谢谢。
这个是ORACLE树型结构数据查询。 start with 指起点 connect by是连接条件。 prior是指父子关系父的一方。具体语法,你可以参见网上的资料,比我表达的清晰多了,呵呵。
而且你还没给出测试数据的脚本,还要别人自己建表插入数据随手写的,相信我就试试,不相信可以无视
select superid,supername,level from test_func
start with code='xxxx'
connect by prior superid=code这个表设计得不太合理,superName字段可以不要
我言辞有些过激。
我只是想说:术业有专攻,闻道有先后。
其实,有些东西,都不是绝对。大家都是IT业人士,求生活而已。技术不能转化为效益,就是垃圾!所以,没有最懂,只有更懂。尊重大家,就是自己。但是,毕竟我的措辞,有失偏颇。向您道歉,鞠躬!
本机既没有ORACLE,也没有PL/SQL,无法调试。
若有幸,明天到单位,定不遗余力!再次表示遗憾,对事不对人~
SELECT LTRIM(SYS_CONNECT_BY_PATH(superid, ' ——》'), ' ——》'),
LTRIM(SYS_CONNECT_BY_PATH(superid, ' ——》'), ' ——》'),
level
FROM test_func
start with code = 'xxxx'
connect by prior superid = code哈哈,也未调试,就一条语句而己,相信你看了就会明白
CODE CODENAME SUPERID SUPERNAME
--------- ---------- ------- ------------
000 北京一小学 0 北京市教育局
000001 一年级 000 北京一小学
000001101 一年级一班 000001 一年级
000001102 一年级二班 000001 一年级
000001103 一年级三班 000001 一年级
000002 二年级 000 北京一小学
000001201 二年级一班 000002 二年级
000001202 二年级二班 000002 二年级
000001203 二年级三班 000002 二年级
000003 三年级 000 北京一小学
000001301 三年级一班 000003 三年级
000001302 三年级二班 000003 三年级
000001303 三年级三班 000003 三年级
13 rows selected
create or replace procedure test_func(t_code varchar2) is
Cursor c is
select distinct superid,supername,level from test
connect by prior superid = code
start with code = t_code;
begin
for c1 in c loop
dbms_output.put_line(c1.superid || ' ' || c1.supername || ' ' || c1.level);
end loop;
end ;
SQL> set serveroutput on;
SQL> exec test_func('000003');
000 北京一小学 1
0 北京市教育局 2
select b.code from test_func b connect by b.code = b.superId start with b.code = 输入的code
)
2 (pi_code IN VARCHAR2)
3 RETURN SYS_REFCURSOR
4 IS
5 po_result SYS_REFCURSOR;
6 BEGIN
7 OPEN po_result FOR
8 SELECT superid,supername FROM test
9 START WITh code=pi_code
10 CONNECT BY PRIOR superid=code;
11 RETURN po_result;
12 END;
13 /函数已创建。SQL> select test_func('000001303') from dual;TEST_FUNC('000001303
--------------------
CURSOR STATEMENT : 1CURSOR STATEMENT : 1SUPERID SUPERNAME
---------------- --------------------------------
000003 三年级
000 北京一小学
0 北京市教育局
SQL>
CREATE OR REPLACE FUNCTION test_func
(pi_code IN VARCHAR2)
RETURN SYS_REFCURSOR
IS
po_result SYS_REFCURSOR;
BEGIN
OPEN po_result FOR
SELECT superid,supername FROM test
START WITh code=pi_code
CONNECT BY PRIOR superid=code;
11 RETURN po_result;
12 END;
结果没也来呢!请指教
我编辑那函数后 用select test_func('000001101') from dual;后出现
test_view('000001101')
<Cursor>
CREATE OR REPLACE FUNCTION test_func
(pi_code IN VARCHAR2)
RETURN SYS_REFCURSOR
IS
po_result SYS_REFCURSOR;
BEGIN
OPEN po_result FOR
SELECT superid,supername FROM test
START WITh code=pi_code
CONNECT BY PRIOR superid=code;
RETURN po_result;
END;
结果没也来呢!请指教
我编辑那函数后 用select test_func('000001101') from dual;后出现
test_func('000001101')
<Cursor>
我编辑那函数后 用select test_func('000001101') from dual;后出现
test_func('000001101')
<Cursor>
我单步调试也会啊,可结果就是:test_func('000001101')
<Cursor>
你也是用pl/sql吗?
直接点它。
自然有你想要的结果。要不你和我上面一样,在命令行了执行。
(pi_code IN VARCHAR2)
RETURN SYS_REFCURSOR
IS
po_result SYS_REFCURSOR;
BEGIN
OPEN po_result FOR
SELECT superid,supername FROM test
START WITh code=pi_code
CONNECT BY PRIOR superid=code;
RETURN po_result;
END;
兄弟的代码我有些地方不懂,这里start with code=pi_code
connect by prior superid=code
分别是什么意思啊?能否指点下,听听你的思路!谢谢。
start with 指起点
connect by是连接条件。
prior是指父子关系父的一方。具体语法,你可以参见网上的资料,比我表达的清晰多了,呵呵。