Plsql 在过程中使用批量收集变量并引用它';s列,而不再次声明所有内容

Plsql 在过程中使用批量收集变量并引用它';s列,而不再次声明所有内容,plsql,types,package,procedure,bulk-collect,Plsql,Types,Package,Procedure,Bulk Collect,我使用批量收集从大量地址字段中收集值(缩短以使代码更小),我希望将该变量传递到包中的不同过程中,然后引用这些列。手术的类型是什么?我已经设置好了批量收集部分,它只是在使用它(创建位置(部分)的过程),而不必重写和重新定义我遇到问题的所有变量。或者我不能这样做吗 procedure create_adrx( v_sub_id in number

我使用批量收集从大量地址字段中收集值(缩短以使代码更小),我希望将该变量传递到包中的不同过程中,然后引用这些列。手术的类型是什么?我已经设置好了批量收集部分,它只是在使用它(创建位置(部分)的过程),而不必重写和重新定义我遇到问题的所有变量。或者我不能这样做吗

procedure create_adrx(
            v_sub_id                                                                in number
        ) AS

            TYPE adrx_info_rectype is RECORD(
                ADRX1                                                               VARCHAR(1000)
                , ADRX2                                                             VARCHAR2(1000)
                , CITY                                                              VARCHAR2(200)
                , COUNTY                                                            VARCHAR2(50)
                , STATE                                                             VARCHAR2(40)
                , ZIP                                                               VARCHAR2(50)
                , SITE_NAME                                                         VARCHAR2(30)
                , GEO_LAT                                                           NUMBER
                , GEO_LONG                                                          NUMBER
            );

            TYPE adrx_info_tbl is TABLE OF adrx_info_rectype;

            adrx_info                                                               adrx_info_tbl;
            v_location_id_result                                                    NUMBER;
            v_party_site_id_result                                                  NUMBER;
            v_account_number_result                                                 NUMBER;

        BEGIN
        
            SELECT
                NVL(sl.ADDRESS1, asi.ADDRESS1)                                      as ADRX1
                , NVL(sl.ADDRESS2, asi.ADDRESS2)                                    as ADRX2
                , NVL(sl.CITY, asi.CITY)                                            as CITY
                , NVL(sl.COUNTY, asi.COUNTY)                                        as COUNTY
                , NVL(sl.STATE, asi.STATE)                                          as STATE
                , NVL(sl.ZIP, asi.ZIP)                                              as ZIP
                , NVL(sl.SITE_NAME, esi.ALT_SITE_NAME)                              as SITE_NAME
                , NVL(sl.LATITUDE, asi.LATITUDE)                                    as GEO_LAT
                , NVL(sl.LONGITUDE, asi.LONGITUDE)                                  as GEO_LONG
            BULK COLLECT INTO
                adrx_info
            FROM
                TBL_SUBS ts
                LEFT JOIN TBL_SUB_LEVEL sl on sl.sub_id = ts.sub_id
                LEFT JOIN TBL_ALT_SUB_LEVEL asl on asl.sub_id = ts.sub_id
                LEFT JOIN TBL_ALT_SITE_INFO asi on asi.ALT_SITE_ID = asl.ALT_SITE_ID
                LEFT JOIN TBL_ALT_EXT_SITE_INFO esi on esi.ALT_EXT_SITE_ID = asi.ALT_EXT_SITE_ID and esi.CUST_ID = ts.CUST_ID
            WHERE
                ts.sub_id = v_sub_id;
            
            -- CREATE LOCATION
            create_location(adrx_info);
        
procedure create_location(
        adrx_info                                                                   in TABLE (??)
    ) as
    
    BEGIN
        
        run statements using adrx_info.ADRX1, adrx_info.STATE, etc...
        
    END;

如果我理解正确,那么:与其在PL/SQL过程中创建类型(使它们仅在其中“可见”),不如在SQL级别上创建它们(使用
create TYPE
语句)。这样,您就可以在所有PL/SQL过程中随时随地使用它,而无需重新键入所有内容


或者,如果它是一个包,则在包规范中创建类型,然后它将在该包中的所有过程中使用。

因此它将在包中,但在过程块之外?我建议使用包规范。然后我会不会将填充的变量传递给下一个要使用它的过程?或者可能是我传递了它,但是类型变成了“in adrx_info_tbl”,而不是“in TABLE”,我在这里为create_location过程提供了它。你总是传递a变量和类型,就像你传递任何其他参数一样。是否填充取决于过程的逻辑需求。因此,也许“populate_adrx_info”(p_adrx_info out adrx_info_tbl)”并为空;然后“consume_adrx_info(p_adrx_info in adrx_info_tbl)”并将其填充。但无论哪种方式,您都在传递定义为adrx_info_tbl的变量。