求解:select查询列为null不显示的过程转为函数
是这样的,查询的是公司表bd_corp,三个字段unitcode,unitname,sealeddate。
其中在unitcode like '02%'的时候,sealeddate列会全部是null,这个时候查询的时候不要这一列,在unitcode like '01%'的时候,sealeddate不全是null,需要。
这个据说动态sql能搞定,但是没用过。
求人用过程写出的是:
CREATE OR REPLACE PROCEDURE print_corp(v_cur OUT Sys_Refcursor)
AS
v_count NUMBER;
BEGIN
SELECT COUNT(*) INTO v_count FROM bd_corp WHERE unitcode like '01%'and sealeddate IS NOT NULL;
IF v_count >0 THEN
OPEN v_cur FOR SELECT unitcode,unitname,sealeddate FROM bd_corp;
ELSE
OPEN v_cur FOR SELECT unitcode,unitname FROM bd_corp;
END IF;
END;
这个过程达到了根据公司表编码unitcode查询,如果查询结果的sealeddate列全是空值,不要这一列。
这个过程有一个缺点,
1,不能在PL/SQL Developer使用,必须在sqlplus中,因为使用了:
SQL> var v_cur refcursor
SQL> exec print_cur(:v_cur);
2,不能讲unitcode作为一个变量,每次查询不同的还要重新定义过程。
我想写成一个function,将unitcode作为一个变量,然后查询的时候可以直接select function(‘xx’) from dual。
请问可以吗?(据说sys_refcursor是oracle9i以后系统定义的一个refcursor,主要用在过程中返回结果集。)