zoukankan      html  css  js  c++  java
  • Oracle Customer Contacts Info

    image image

    ---create custom object
    
    CREATE OR REPLACE TYPE KOL_UNIT_TYPE AS OBJECT
    (
       ADDRESS_ID NUMBER (10),
       CUSTOMER_ID NUMBER (10),
       CONTACT1_FIRSTNAME VARCHAR2 (40),
       CONTACT1_LASTNAME VARCHAR2 (50),
       CONTACT1_TITLE VARCHAR2 (100),
       CONTACT1_TELNO VARCHAR2 (50),
       CONTACT1_FAXNO VARCHAR2 (50),
       CONTACT1_EMAIL VARCHAR2 (2000),
       CONTACT2_FIRSTNAME VARCHAR2 (40),
       CONTACT2_LASTNAME VARCHAR2 (50),
       CONTACT2_TITLE VARCHAR2 (100),
       CONTACT2_TELNO VARCHAR2 (50),
       CONTACT2_FAXNO VARCHAR2 (50),
       CONTACT2_EMAIL VARCHAR2 (2000),
       CONTACT3_FIRSTNAME VARCHAR2 (40),
       CONTACT3_LASTNAME VARCHAR2 (50),
       CONTACT3_TITLE VARCHAR2 (100),
       CONTACT3_TELNO VARCHAR2 (50),
       CONTACT3_FAXNO VARCHAR2 (50),
       CONTACT3_EMAIL VARCHAR2 (2000)
    )
    
    
    
    
    ---create table object by type Object   
    CREATE TYPE kol_unit AS TABLE OF kol_unit_type;   
    
    
    
    
    ---create pipe function ,  important step   
    create or replace function kol_autolinefeed(p_addrress_id in number,p_customer_id in number)        
    return kol_unit PIPELINED       
    as     
     temp_str varchar2(32767):='';      
     temp_index number:=0;        
     temp_count number:=0;   
     temp_sum number:=0;   
    -- temp_unit1 varchar2(50);   
    -- temp_unit2 varchar2(50);   
    -- temp_unit3 varchar2(50);   
    -- temp_unit4 varchar2(50);   
     
     
    
     
      Contact1_FirstName varchar2(40);
        Contact1_LastName varchar2(50) ;
        Contact1_Title varchar2(100) ;
        Contact1_TelNo varchar2(50) ;
        Contact1_FaxNo varchar2(50) ;
        Contact1_email varchar2(2000)  ;
        Contact2_FirstName varchar2(40) ;
        Contact2_LastName varchar2(50) ;
        Contact2_Title varchar2(100) ;
        Contact2_TelNo varchar2(50) ;
        Contact2_FaxNo varchar2(50) ;
        Contact2_email varchar2(2000) ;
        Contact3_FirstName varchar2(40) ;
        Contact3_LastName varchar2(50) ;
        Contact3_Title varchar2(100) ;
        Contact3_TelNo varchar2(50) ;
        Contact3_FaxNo varchar2(50) ;
        Contact3_email varchar2(2000)  ;    
    begin        
         select count(*) into temp_sum from AR_CONTACTS_V ac where  ac.CUSTOMER_ID = p_customer_id AND ac.ADDRESS_ID = p_addrress_id; 
           
         if temp_sum<=0 then  
           pipe row(null);   
           return;   
         end if;   
         
         for v_unit in (
           SELECT 
           AC.ADDRESS_ID,
           ac.customer_id,
           FIRST_NAME, 
           LAST_NAME
           ,TITLE
           ,TITLE_MEANING
           ,MAIL_STOP
           ,(SELECT AP.PHONE_NUMBER  FROM AR_PHONES_V AP WHERE 1=1 AND AC.REL_PARTY_ID = AP.OWNER_TABLE_ID AND UPPER(AP.PHONE_TYPE_MEANING) = 'E-MAIL' ) EMAIL
           ,(SELECT AP.PHONE_NUMBER  FROM AR_PHONES_V AP WHERE 1=1 AND AC.REL_PARTY_ID = AP.OWNER_TABLE_ID AND UPPER(AP.PHONE_TYPE_MEANING) = 'FAX' ) FAX
           ,(SELECT AP.PHONE_NUMBER  FROM AR_PHONES_V AP WHERE 1=1 AND AC.REL_PARTY_ID = AP.OWNER_TABLE_ID AND UPPER(AP.PHONE_TYPE_MEANING) = 'TELEPHONE' ) PHONE
           FROM AR_CONTACTS_V AC
           WHERE 1=1
           AND ac.CUSTOMER_ID = p_customer_id
           AND ac.ADDRESS_ID = p_addrress_id) loop 
             
           temp_count:=(temp_count+1);   
           if (mod(temp_count,3)=1) then  
             Contact1_FirstName :=v_unit.FIRST_NAME;
             Contact1_LastName :=v_unit.LAST_NAME;   
             Contact1_Title :=v_unit.TITLE;   
             Contact1_TelNo :=v_unit.PHONE;   
             Contact1_FaxNo :=v_unit.FAX;   
             Contact1_email :=v_unit.EMAIL;     
           elsif (mod(temp_count,3)=2) then  
             Contact2_FirstName :=v_unit.FIRST_NAME;
             Contact2_LastName :=v_unit.LAST_NAME;   
             Contact2_Title :=v_unit.TITLE;   
             Contact2_TelNo :=v_unit.PHONE;   
             Contact2_FaxNo :=v_unit.FAX;   
             Contact2_email :=v_unit.EMAIL;     
           else  
             Contact3_FirstName :=v_unit.FIRST_NAME;
             Contact3_LastName :=v_unit.LAST_NAME;   
             Contact3_Title :=v_unit.TITLE;   
             Contact3_TelNo :=v_unit.PHONE;   
             Contact3_FaxNo :=v_unit.FAX;   
             Contact3_email :=v_unit.EMAIL;     
           end if;   
           
           if (mod(temp_count,3)=0) then  
             pipe row(kol_unit_type(p_addrress_id, p_customer_id, Contact1_FirstName, Contact1_LastName, Contact1_Title, Contact1_TelNo, Contact1_FaxNo, Contact1_email
                                    , Contact2_FirstName, Contact2_LastName, Contact2_Title, Contact2_TelNo, Contact2_FaxNo, Contact2_email
                                    , Contact3_FirstName, Contact3_LastName, Contact3_Title, Contact3_TelNo, Contact3_FaxNo, Contact3_email));      
           else  
             if (temp_sum=temp_count) then    
                if (mod(temp_count,3)=1) then  
                  pipe row(kol_unit_type(p_addrress_id, p_customer_id, Contact1_FirstName, Contact1_LastName, Contact1_Title, Contact1_TelNo, Contact1_FaxNo, Contact1_email
                                    , '', '', '', '', '', ''
                                    , '', '', '', '', '', ''));    
                elsif (mod(temp_count,3)=2) then  
                  pipe row(kol_unit_type(p_addrress_id, p_customer_id, Contact1_FirstName, Contact1_LastName, Contact1_Title, Contact1_TelNo, Contact1_FaxNo, Contact1_email
                                    , Contact2_FirstName, Contact2_LastName, Contact2_Title, Contact2_TelNo, Contact2_FaxNo, Contact2_email
                                    , '', '', '', '', '', ''));    
      
                else  
                  pipe row(kol_unit_type(p_addrress_id, p_customer_id, Contact1_FirstName, Contact1_LastName, Contact1_Title, Contact1_TelNo, Contact1_FaxNo, Contact1_email
                                    , Contact2_FirstName, Contact2_LastName, Contact2_Title, Contact2_TelNo, Contact2_FaxNo, Contact2_email
                                    , Contact3_FirstName, Contact3_LastName, Contact3_Title, Contact3_TelNo, Contact3_FaxNo, Contact3_email)); 
                end if;   
             end if;   
           end if;   
         end loop;   
         exception      
          when others then     
          pipe row(null);       
    end; 
    
    
    
    
    -- Customer Info
    SELECT 
           CUST.CUSTOMER_NUMBER,
           CUST.CUSTOMER_NAME,      
           ADDR.ADDRESS1,
           ADDR.ADDRESS2,
           ADDR.ADDRESS3,
           ADDR.ADDRESS4,
           ADDR.POSTAL_CODE, 
           ADDR.ATTRIBUTE5 REGION, 
           CONTACTS.CONTACT1_FIRSTNAME,
           CONTACTS.CONTACT1_LASTNAME,
           CONTACTS.CONTACT1_TITLE,
           CONTACTS.CONTACT1_TELNO,
           CONTACTS.CONTACT1_FAXNO,
           CONTACTS.CONTACT1_EMAIL,
           CONTACTS.CONTACT2_FIRSTNAME,
           CONTACTS.CONTACT2_LASTNAME,
           CONTACTS.CONTACT2_TITLE,
           CONTACTS.CONTACT2_TELNO,
           CONTACTS.CONTACT2_FAXNO,
           CONTACTS.CONTACT2_EMAIL,
           CONTACTS.CONTACT3_FIRSTNAME,
           CONTACTS.CONTACT3_LASTNAME,
           CONTACTS.CONTACT3_TITLE,
           CONTACTS.CONTACT3_TELNO,
           CONTACTS.CONTACT3_FAXNO,
           CONTACTS.CONTACT3_EMAIL,
           ADDR.ATTRIBUTE10 SALESMAN,
           SITE.SALESPERSON,
           ADDR.STATUS    
    --       CURSOR(
    --       SELECT 
    --       AC.ADDRESS_ID,
    --       FIRST_NAME, 
    --       LAST_NAME
    --       ,TITLE
    --       ,TITLE_MEANING
    --       ,MAIL_STOP
    --       ,(SELECT AP.PHONE_NUMBER  FROM AR_PHONES_V AP WHERE 1=1 AND AC.REL_PARTY_ID = AP.OWNER_TABLE_ID AND UPPER(AP.PHONE_TYPE_MEANING) = 'E-MAIL' ) EMAIL
    --       ,(SELECT AP.PHONE_NUMBER  FROM AR_PHONES_V AP WHERE 1=1 AND AC.REL_PARTY_ID = AP.OWNER_TABLE_ID AND UPPER(AP.PHONE_TYPE_MEANING) = 'FAX' ) FAX
    --       ,(SELECT AP.PHONE_NUMBER  FROM AR_PHONES_V AP WHERE 1=1 AND AC.REL_PARTY_ID = AP.OWNER_TABLE_ID AND UPPER(AP.PHONE_TYPE_MEANING) = 'TELEPHONE' ) PHONE
    --       FROM AR_CONTACTS_V AC
    --       WHERE 1=1
    --      -- AND AC.ADDRESS_ID = 3557
    --       AND ADDR.CUSTOMER_ID = AC.CUSTOMER_ID
    --       AND ADDR.ADDRESS_ID = AC.ADDRESS_ID) CONTACTS
           -----------------       
     FROM 
    -- AR_CONTACTS_V AC,
          --HZ_SITE_USES_V SITE,
          (
              SELECT  DISTINCT 
                SU.SITE_USE_ID,
                SU.SITE_USE_CODE,
                SU.CUST_ACCT_SITE_ID ADDRESS_ID,
                SU.PRIMARY_FLAG,
                SU.STATUS,
                SU.LOCATION,
                SU.BILL_TO_SITE_USE_ID,
                SU_BILL.LOCATION BILL_TO_LOCATION,
                SU.PAYMENT_TERM_ID,
                TERM.NAME PAYMENT_TERM_NAME,
                SR.NAME SALESPERSON
          FROM HZ_CUST_SITE_USES_ALL SU, 
               HZ_CUST_SITE_USES_ALL SU_BILL, 
               RA_TERMS_TL TERM,
               JTF_RS_SALESREPS SR
         WHERE     1 = 1
         AND SU.PRIMARY_SALESREP_ID = SR.SALESREP_ID(+)
               AND SU.BILL_TO_SITE_USE_ID = SU_BILL.SITE_USE_ID(+)
               AND SU.PAYMENT_TERM_ID = TERM.TERM_ID(+)
               AND TERM.LANGUAGE = 'US'
          ) SITE, 
          --AR_ADDRESSES_V ADDR,
          (
             SELECT  
              ADDR.CUST_ACCT_SITE_ID ADDRESS_ID,
              ADDR.CUST_ACCOUNT_ID CUSTOMER_ID,
              ADDR.STATUS STATUS,
              ADDR.ORIG_SYSTEM_REFERENCE ORIG_SYSTEM_REFERENCE,
              LOC.COUNTRY COUNTRY,
              T.TERRITORY_SHORT_NAME TERRITORY_SHORT_NAME,
              B.ADDRESS_STYLE ADDRESS_STYLE,
              LOC.ADDRESS1 ADDRESS1,
              LOC.ADDRESS2 ADDRESS2,
              LOC.ADDRESS3 ADDRESS3,
              LOC.ADDRESS4 ADDRESS4,
              LOC.CITY CITY,
              LOC.COUNTY COUNTY,
              LOC.STATE STATE,
              LOC.PROVINCE PROVINCE,
              LOC.POSTAL_CODE POSTAL_CODE,
              ARP_ADDR_PKG.FORMAT_ADDRESS (LOC.ADDRESS_STYLE,
                                           LOC.ADDRESS1,
                                           LOC.ADDRESS2,
                                           LOC.ADDRESS3,
                                           LOC.ADDRESS4,
                                           LOC.CITY,
                                           LOC.COUNTY,
                                           LOC.STATE,
                                           LOC.PROVINCE,
                                           LOC.POSTAL_CODE,
                                           T.TERRITORY_SHORT_NAME) CONCATENATED_ADDRESS,
              ADDR.LAST_UPDATE_LOGIN LAST_UPDATE_LOGIN,
              ADDR.TERRITORY_ID TERRITORY_ID,
              LOC.ADDRESS_KEY,
              ADDR.ATTRIBUTE1 ATTRIBUTE1,
              ADDR.ATTRIBUTE2 ATTRIBUTE2,
              ADDR.ATTRIBUTE3 ATTRIBUTE3,
              ADDR.ATTRIBUTE4 ATTRIBUTE4,
              ADDR.ATTRIBUTE5 ATTRIBUTE5,
              ADDR.ATTRIBUTE6 ATTRIBUTE6,
              ADDR.ATTRIBUTE7 ATTRIBUTE7,
              ADDR.ATTRIBUTE8 ATTRIBUTE8,
              ADDR.ATTRIBUTE9 ATTRIBUTE9,
              ADDR.ATTRIBUTE10 ATTRIBUTE10,
              ADDR.ATTRIBUTE11 ATTRIBUTE11,
              ADDR.ATTRIBUTE12 ATTRIBUTE12,
              ADDR.ATTRIBUTE13 ATTRIBUTE13,
              ADDR.ATTRIBUTE14 ATTRIBUTE14,
              ADDR.ATTRIBUTE15 ATTRIBUTE15,
              PARTY_SITE.PARTY_SITE_ID,
              PARTY_SITE.PARTY_ID,
              LOC.LOCATION_ID PARTY_LOCATION_ID, 
              PARTY_SITE.PARTY_SITE_NUMBER SITE_NUMBER,
              PARTY_SITE.IDENTIFYING_ADDRESS_FLAG,
              ADDR.ATTRIBUTE16,
              ADDR.ATTRIBUTE17,
              ADDR.ATTRIBUTE18,
              ADDR.ATTRIBUTE19,
              ADDR.ATTRIBUTE20
         FROM 
              FND_LOOKUP_VALUES L_CAT,
              FND_TERRITORIES_TL T, FND_TERRITORIES B,
              HZ_CUST_ACCT_SITES_ALL ADDR,
              HZ_PARTY_SITES PARTY_SITE,
              HZ_LOCATIONS LOC
        WHERE  1=1
            AND L_CAT.LANGUAGE(+) = 'US'            
              AND L_CAT.VIEW_APPLICATION_ID(+) = 222
              AND L_CAT.SECURITY_GROUP_ID(+) = 0
        AND B.TERRITORY_CODE = T.TERRITORY_CODE
        AND T.LANGUAGE = 'US'
             AND  ADDR.CUSTOMER_CATEGORY_CODE = L_CAT.LOOKUP_CODE(+)
              AND L_CAT.LOOKUP_TYPE(+) = 'ADDRESS_CATEGORY'
              AND LOC.COUNTRY = B.TERRITORY_CODE(+)
              AND ADDR.PARTY_SITE_ID = PARTY_SITE.PARTY_SITE_ID
              AND LOC.LOCATION_ID = PARTY_SITE.LOCATION_ID
          ) ADDR,
          --RA_CUSTOMERS CUST
          ( SELECT CUST_ACCT.CUST_ACCOUNT_ID CUSTOMER_ID,
                   PARTY.PARTY_ID,
                   PARTY.PARTY_NUMBER,
                   PARTY.PARTY_TYPE,
                   SUBSTRB (PARTY.PARTY_NAME, 1, 50) CUSTOMER_NAME,
                   CUST_ACCT.ACCOUNT_NUMBER CUSTOMER_NUMBER,
                   CUST_ACCT.STATUS,
                   CUST_ACCT.CUSTOMER_TYPE
              FROM HZ_PARTIES PARTY, 
                   HZ_CUST_ACCOUNTS CUST_ACCT
             WHERE CUST_ACCT.PARTY_ID = PARTY.PARTY_ID
            ) CUST
            -------------
            ,
            TABLE(KOL_AUTOLINEFEED(ADDR.ADDRESS_ID, ADDR.CUSTOMER_ID)) CONTACTS
     WHERE     1 = 1
     AND CONTACTS.ADDRESS_ID = ADDR.ADDRESS_ID
     AND CONTACTS.CUSTOMER_ID = ADDR.CUSTOMER_ID
     ---------------------
           AND SITE.ADDRESS_ID = ADDR.ADDRESS_ID
           AND ADDR.CUSTOMER_ID = CUST.CUSTOMER_ID
           --AND (SITE.ADDRESS_ID = 3557)
           --AND ADDR.CUSTOMER_ID = AC.CUSTOMER_ID
           --AND ADDR.ADDRESS_ID = AC.ADDRESS_ID
           -------------------------
           AND SITE.SITE_USE_CODE = 'BILL_TO'
           AND CUST.CUSTOMER_NAME  = 'Customer 11196'
           AND CUST.CUSTOMER_NUMBER = 'DZD02';
  • 相关阅读:
    mysql 游标查询
    mysql忘记root密码的解决
    java 两种缓存
    java 实现缓存
    android ndk
    本地计算机上的 MSSQLSERVER 服务启动后又停止了。一些服务自动停止,如果它们没有什么可做的,例如“性能日志和警报”服务 [解决办法]
    选择WEB开发语言
    linux 查看硬件信息
    java 缓存 谈
    程序员相关
  • 原文地址:https://www.cnblogs.com/quanweiru/p/2948038.html
Copyright © 2011-2022 走看看