结果集与查询不同,而不是Oracle中的存储过程

时间:2014-03-13 07:08:32

标签: oracle oracle10g oracle-sqldeveloper

我有一个sp给我错误的结果。那个sp返回一个缺少某些行的游标。现在

  1. 当我们在查询窗口中直接触发sp中的查询时,会出现正确的结果。此查询的唯一区别是查询直接输出结果集而不是游标;即,当我们直接触发查询时,没有打开光标。
  2. 当我们重新编译sp时,正确的结果会出现一段时间,然后在一段时间后又回到缺少的行。
  3. 未能在此方面取得很大进展。任何关于寻找什么,如何取得进步等的指示都非常感谢。如果需要,我可以将sp粘贴到这里,并且可能会以某种其他方式重写sp以使问题消失,但我更有兴趣了解根本原因 - 可能导致这个奇怪问题的原因是什么?

    SP

    CREATE OR REPLACE PROCEDURE "SP_GETTAXSETTINGCHANNELINFO" (v_bid                   varchar2,
                                 p_rdTaxSetting          out SYS_REFCURSOR) as
    vT_bid varchar2(100);
    
    begin
       vT_bid := v_bid;
    
        Open p_rdTaxSetting for
        Select taxmappingid, CHANNELNAME,PROPERTYNAME, PROPERTYID, TAXTYPE, ISPARTIALLYINCLUSIVE, PARTIALLYINCLUSIVEVALUE
        FROM (
        WITH ChannelData AS (
        SELECT ONDEMAND_SELECTED_SOURCES AS OnDemandChannels,
        SCHEDULED_SELECTED_SOURCES AS ScheduledChannels
        FROM SUB_ORDER S
        INNER JOIN CONTACT C ON S.Supplier_ID = C.Contact_ID
        WHERE C.BID = vT_bid
        AND S.STATUS='Complete' and current_ind = 1
        ),
        Property_Data As (
        SELECT
        SC.PROPERTY_NUM AS PropertyID
        ,SC.Company_Name as PropertyName
        ,SC.competitor_number as PropertyOrder
        FROM SUB_ORDER S
        INNER JOIN CONTACT C ON S.Supplier_ID = C.Contact_ID
        INNER JOIN SUB_ORDER_COMPETITOR SC ON S.Order_Id = SC.Order_ID
        WHERE C.BID = vT_bid
        AND S.STATUS='Complete' and current_ind = 1
        ),
        ODChannel as (
               select regexp_substr (OnDemandChannels, '[^,]+', 1, rn)  as Channel
               from (Select OnDemandChannels From ChannelData)
               cross join
               (select rownum rn
               from (select max (length (regexp_replace (OnDemandChannels, '[^,]+'))) + 1 max_value
               from (Select OnDemandChannels From ChannelData))
               connect by level <= max_value)
               where regexp_substr (OnDemandChannels, '[^,]+', 1, rn) is not null
        ),
        SCDChannel As (
               select regexp_substr (ScheduledChannels, '[^,]+', 1, rn) as Channel
               from (Select ScheduledChannels From ChannelData)
               cross join
               (select rownum rn
               from (select max (length (regexp_replace (ScheduledChannels, '[^,]+'))) + 1 max_value
               from (Select ScheduledChannels From ChannelData))
               connect by level <= max_value)
               where regexp_substr (ScheduledChannels, '[^,]+', 1, rn) is not null
        ),
        ChaData1 As (
          Select
            CASE lower(Channel)
              WHEN 'galileo' then 'GDS'
              else Channel
              end AS Channel
          from ODChannel
        ),
       ChaData2 As (
          Select CASE lower(Channel)
              WHEN 'galileo' then 'GDS'
              else Channel
              end AS Channel  FROM SCDChannel
        ),
        PropData  As (
          Select Distinct PropertyID,PropertyName  from Property_Data
          order by PropertyID
        ),
        AllChannel AS (
          Select Channel From ChaData1
          union
          Select Channel From ChaData2
        ),
        Prop_Cha_Data As (
            Select Distinct Channel,PropertyID,PropertyName  from AllChannel,Property_Data
            order by Channel,PropertyID
          ),
       Tax_Channel_Prop_Exists AS ( select
          CASE lower(CHANNELNAME)
          WHEN 'galileo' then 'GDS'
          else CHANNELNAME
          end AS CHANNELNAME,
          PropertyName As PROPERTYNAME, TCP.PROPERTYID As PROPERTYID,TAXTYPE,
        ISPARTIALLYINCLUSIVE, PARTIALLYINCLUSIVEVALUE,taxmappingid
        from TAXSETTING_CHANNEL_PROPERTY TCP
        INNER JOIN AllChannel PC On TRIM (CASE lower(TCP.CHANNELNAME)
              WHEN 'galileo' then 'GDS'else TCP.CHANNELNAME end)  = TRIM(PC.Channel)
        INNER JOIN PropData CP On TCP.PROPERTYID = CP.PropertyID
        where TCP.BID=vT_bid
        )
        Select Distinct taxmappingid, CHANNELNAME,PROPERTYNAME, PROPERTYID, TAXTYPE, ISPARTIALLYINCLUSIVE, PARTIALLYINCLUSIVEVALUE from Tax_Channel_Prop_Exists
         UNION ALL
          select DISTINCT 0 As taxmappingid, PCD.Channel As CHANNELNAME,
          PCD.PropertyName  As PROPERTYNAME ,
          PCD.propertyid As PROPERTYID,
          -1 As TAXTYPE,
          0 As ISPARTIALLYINCLUSIVE,
            '' As PARTIALLYINCLUSIVEVALUE
            FROM Prop_Cha_Data PCD
            WHERE NOT EXISTS (
             Select taxmappingid FROM Tax_Channel_Prop_Exists E
             WHERE  E.channelname = PCD.Channel AND
              E.propertyid = PCD.propertyid )
            )
            Order by PROPERTYNAME,CHANNELNAME ;
    
    
    end SP_GetTaxSettingChannelInfo;
    

0 个答案:

没有答案