两个表,两个types 如下:create table HL002
(
  ID   VARCHAR2(2),
  NAME VARCHAR2(10),
  TIME Date
);CREATE TABLE HL003
(
  RECORD_ID VARCHAR2(2),
  RECORD_NAME VARCHAR(10),
  ID          VARCHAR(2)  --与表HL002关联
);create or replace type HL003_TYP_LIST AS TABLE OF HL003_TYP_OBJ;create or replace type HL003_TYP_OBJ as object
(
  RECORD_ID varchar(2),
  RECORD_NAME varchar(10),
  ID          VARCHAR(2)
);create or replace type HL002_TYP_LIST AS TABLE OF HL002_TYP_OBJ;create or replace type HL002_TYP_OBJ as object
(
  ID varchar(2),
  NAME varchar(10),
  TYP_LIST HL003_TYP_LIST 
);想写个存储过程,实现按时间查询,并输出types类型的结果CREATE OR REPLACE PACKAGE BODY PRC_TEST001 AS
  PROCEDURE TEST001(BEGINDATE      IN VARCHAR2,
                    ENDDATE        IN VARCHAR2,
                    V_TYP_002_LIST OUT HL002_TYP_LIST) AS
    V_TYP_003_LIST HL003_TYP_LIST;
  BEGIN
    --获取 V_TYP_003_LIST
    SELECT HL003_TYP_OBJ(B.RECORD_ID, B.RECORD_NAME, B.ID) BULK COLLECT
      INTO V_TYP_003_LIST
      FROM HL003 B, HL002 A
     WHERE A.ID = B.ID;
    --获取 V_TYP_002_LIST
    SELECT HL002_TYP_OBJ(A.ID, A.NAME, V_TYP_003_LIST) BULK COLLECT
      INTO V_TYP_002_LIST
      FROM HL002 A
     WHERE A.RECORD_TIME >= BEGINDATE
       AND A.RECORD_TIME < ENDDATE;
  END TEST001;
END PRC_TEST001;请问
1、我如何对输入的时间参数做判断,比如判断是否为空,因为是作为where条件的
2、在获取第二个输出的时候,其中的V_TYP_003_LIST怎样和HL002 表关联!?

解决方案 »

  1.   

    1、我如何对输入的时间参数做判断,比如判断是否为空,因为是作为where条件的IF BEGINDATE IS NULL  --判断是否为空2. 在获取第二个输出的时候,其中的V_TYP_003_LIST怎样和HL002 表关联!?
    没明白什么意思。
      

  2.   

    V_TYP_003_LIST怎样和HL002 表关联? 是获取两个里面联合起来的数据?
      

  3.   

    问题1补充: 判断入参为空,作为where条件,就得拼接字符串,如下: v_sql := 'SELECT HL002_TYP_OBJ(A.ID, A.NAME, V_TYP_003_LIST)
               FROM HL002 A  
               WHERE 1=1 ';
    IF BEGINDATE IS NOT NULL THEN 
     v_sql := v_sql || ' and to_char(time,yyyy-mm-dd) >= '''||begindate||'''';
    END IF
    open v_cursor for v_sql;
     fetch v_cursor BULK COLLECT
          INTO V_TYP_002_LIST;这样的话,红色部分是由上一句取得的hl002的记录集,在当前独立语句中不认,而且也不能作为作为字符串类型拼接!
    所以不知道这么写了!!
    ------------------
    问题2补充:
    第二句中的 V_TYP_003_LIST 是由上句取得的记录集,应该是满足关联的全部数据,加到当前句中 作为一个变量,里面的数据例如
     record_id,record_name,id
          1         记录1    1
          2         记录2    1
          3         记录3    2
          4         记录4    2
    而 第二句 根据where 条件 查询结果 为: 
      id        name        V_TYP_003_LIST    
       1        名字1      record_id,record_name,id
                                1         记录1    1
                                2         记录2    1
                                3         记录3    2
                                4         记录4    2
       2        名字2      record_id,record_name,id
                                1         记录1    1
                                2         记录2    1
                                3         记录3    2
                                4         记录4    2
    意思就是说 V_TYP_003_LIST 中的记录如何与外面的对应上!
      

  4.   


    其实就是 查询 两个表的关联数据,只不过返回类型定义的比较恶心!type 里面还嵌套了一个type
      

  5.   

    交給Oracle處理,Oracle可以用命令生成对应type的Java Class