2011-01-12 11 views
13

में चर के साथ एसक्यूएल कोड चलाएं मैं ओरेकल एसक्यूएल डेवलपर का उपयोग कर कोड लिख रहा हूं।ओरेकल एसक्यूएल डेवलपर कोड विंडो

SELECT 
     CFS.CAE_SEC_ID, 
     CFS.FM_SEC_CODE, 
     CFS.LAST_USER_ID, 
     case 
      when 1 = 1 then 
      sl.usbank_to_edit 
      else 
      case 
       when 'ENT\CB174' = CFS.last_user_id then 
       sl.owner_to_edit 
       else 
       sl.to_edit 
      end 
     end canEdit 
    FROM 
    CAEDBO.CAE_FOF_SECURITY CFS 
    INNER JOIN caedbo.CAE_DATA_SET_ELEMENT CDSE_STAT 
     ON (CDSE_STAT.DATA_SET_ELEMENT_ID = CFS.APPR_STATUS) 
    INNER JOIN caedbo.CAE_STATE_LOOKUP sl 
     ON (sl.object_state = CDSE_STAT.data_set_element_id) 
    where 
     cfs.CAE_SEC_ID in (3741, 3744, 3748, 3752); 

हालांकि मैं इसे करने के लिए कुछ चर जोड़ने के लिए और बयान में चर, नीचे के समान संदर्भ, और भी कोड विंडो में इसे चलाने के लिए चाहते हैं: मैं एक साधारण चयन बयान है कि काम करता है। मैं इसे सही तरीके से कैसे करूं?

DECLARE 
    p_USBank_n NUMBER; 
    p_user_id_c VARCHAR2(20); 
BEGIN 
    p_USBank_n := 1; 
    p_user_id_c := 'ENT\CB174'; 

    SELECT 
     CFS.CAE_SEC_ID, 
     CFS.FM_SEC_CODE, 
     CFS.LAST_USER_ID, 
     case 
      when p_USBank_n = 1 then 
      sl.usbank_to_edit 
      else 
      case 
       when p_user_id_c = CFS.last_user_id then 
       sl.owner_to_edit 
       else 
       sl.to_edit 
      end 
     end canEdit 
    FROM 
    CAEDBO.CAE_FOF_SECURITY CFS 
    INNER JOIN caedbo.CAE_DATA_SET_ELEMENT CDSE_STAT 
     ON (CDSE_STAT.DATA_SET_ELEMENT_ID = CFS.APPR_STATUS) 
    INNER JOIN caedbo.CAE_STATE_LOOKUP sl 
     ON (sl.object_state = CDSE_STAT.data_set_element_id) 
    where 
     cfs.CAE_SEC_ID in (3741, 3744, 3748, 3752); 
END; 

जब मैं एक एसक्यूएल विंडो में यह चलाने मैं नीचे संदेश:

Error report: 
ORA-06550: line 8, column 5: 
PLS-00428: an INTO clause is expected in this SELECT statement 
06550. 00000 - "line %s, column %s:\n%s" 
*Cause: Usually a PL/SQL compilation error. 
*Action: 
+3

एह अगर मैं यह पता लगा सकता है कि उसके बाद मैं एक तरह से गूंगा टिप्पणी I..what हैं पूछा नहीं होता है? यदि आपके पास कहने के लिए रचनात्मक कुछ भी नहीं है, तो कृपया कुछ भी मत कहें, धन्यवाद –

उत्तर

19

अगर मैं सही ढंग से इस पढ़ रहा हूँ, मुझे लगता है कि आप के लिए Oracle Substitution variables.

इस संकेत देगा देख रहे हैं & वैल का उपयोग करके मूल्यों को इनपुट करने के लिए प्रत्येक बार यह आपको @ रनटाइम

SELECT 
     CFS.CAE_SEC_ID, 
     CFS.FM_SEC_CODE, 
     CFS.LAST_USER_ID, 
     CASE 
      when &p_USBank_n = 1 then 
      sl.usbank_to_edit 
      else 
      CASE 
       when '&p_user_id_c' = CFS.last_user_id then 
       sl.owner_to_edit 
       else 
       sl.to_edit 
      end 
     end canEdit 
    FROM 
    CAEDBO.CAE_FOF_SECURITY CFS 
    INNER JOIN caedbo.CAE_DATA_SET_ELEMENT CDSE_STAT 
     ON (CDSE_STAT.DATA_SET_ELEMENT_ID = CFS.APPR_STATUS) 
    INNER JOIN caedbo.CAE_STATE_LOOKUP sl 
     ON (sl.object_state = CDSE_STAT.data_set_element_id) 
    where 
     CFS.CAE_SEC_ID IN (3741, 3744, 3748, 3752); 

परिवर्तन यह & & वर के लिए यह मूल्य बनाए रखने के लिए, तो

UNDEFINE var 

का उपयोग का उपयोग करके स्पष्ट करने के लिए (इस प्रकार शीघ्र परहेज) यह

अब आप पेज के शीर्ष पर इन सेट कर सकते हैं करने के लिए परिभाषा डबल एम्परसेंड ऐसे

DEFINE XYZ = 5 
DEFINE AAA = to_date('10/10/2010','mm/dd/rrrr') 
DEFINE textString = AaBbCc 

SELECT &&XYZ b, &&AAA a, '&&textString' textString 
    from dual ; 

    B      A       TEXTSTRING 
    ---------------------- ------------------------- ---------- 
    5      10.OCT.2010 00:00   AaBbCc  
    --typing define will show you all the "defined" values 
define 

    DEFINE XYZ = "5" 
    DEFINE TEXTSTRING = "AaBbCc" 
    DEFINE AAA = "to_date('10/10/2010','mm/dd/rrrr')" 

'के रूप में बनाए रखने के लिए' होगा मूल्य जब तक आप इसे undefine (ऊपर देखें) या यह फिर से परिभाषित।

+0

धन्यवाद जो आप कहते हैं वह +1 करता है, लेकिन मैं पृष्ठ के शीर्ष पर चर घोषित करना चाहता हूं। मेरी क्वेरी कई चर के साथ एक बहुत बड़ा हिस्सा है, इसलिए –

+2

@Ciaran Bruen के लिए दर्द का थोड़ा सा संकेत दिया जा रहा है, आप 'डेफिन' (संपादन और उदाहरण के लिए ऊपर देखें) का उपयोग कर प्रॉम्प्ट के आसपास हो सकते हैं – Harrison

+0

धन्यवाद बहुत सराहना अद्यतन करें। सुनिश्चित नहीं है कि उत्तर के रूप में कौन से उत्तर को दोनों उत्तरों के रूप में चिह्नित करना सही है? –

4

त्रुटि संदेश समस्या बताता है; पीएल/एसक्यूएल ब्लॉक के अंदर आपको INTO कुछ चुनना होगा, और आप सादे एसक्यूएल के साथ एक क्वेरी के परिणामों को सिर्फ स्क्रीन पर डंप नहीं कर सकते हैं। (ऐसा करने के तरीके हैं लेकिन संभवतया यह बहुत जटिल है कि ऐसा लगता है कि आप यहां हासिल करने की कोशिश कर रहे हैं)।

यदि आप प्रतिस्थापन चर का उपयोग @Harrison के रूप में नहीं करना चाहते हैं, तो आप बाध्य चर का उपयोग कर सकते हैं जिसे आप एक अलग अज्ञात ब्लॉक में शुरुआत में परिभाषित करते हैं। इसके बाद आप सादे एसक्यूएल में बाँध चर का उल्लेख कर सकते हैं:

var p_usbank_n number; 
var p_user_id_c varchar2(20); 

exec :p_usbank_n := 1; 
exec :p_user_id_c := 'ENT\CB174'; 

select 
    cfs.cae_sec_id, 
    cfs.fm_sec_code, 
    cfs.last_user_id, 
    case 
     when 1 = :p_usbank_n then 
      sl.usbank_to_edit 
     when cfs.last_user_id = :p_user_id_c then 
      sl.owner_to_edit 
     else 
      sl.to_edit 
    end as canEdit 
from 
    caedbo.cae_fof_security cfs 
inner join caedbo.cae_data_set_element cdse_stat 
    on (cdse_stat.data_set_element_id = cfs.appr_status) 
inner join caedbo.cae_state_lookup sl 
    on (sl.object_state = cdse_stat.data_set_element_id) 
where 
    cfs.cae_sec_id in (3741, 3744, 3748, 3752); 
+0

हाय एलेक्स, बस अभी इस पर वापस आ रहा है। उपरोक्त कोड इनपुट मानों के लिए मुझे संकेत दे रहा है भले ही कोड में मान निर्दिष्ट किए जा रहे हों। कोई विचार यह क्यों हो सकता है? –

+1

@Ciaran: एसक्यूएल डेवलपर में, क्या आप 'रन' कर रहे हैं (जो कि 'एंटर बाइंड्स' शीर्षक वाली विंडो में संकेत देगा, क्योंकि यह केवल वर्तमान कथन चलाता है); या 'रन स्क्रिप्ट' (एफ 5)? आपको इसे 'var', 'exec' और फिर' select' को एक इकाई के रूप में चलाने के लिए बाद में करने की आवश्यकता है। यह हैरिसन के 'परिभाषित' संस्करण के लिए भी सच है - यदि आप 'रन' करते हैं तो आपको प्रतिस्थापन चर के लिए संकेत दिया जाता है। –

+1

एसक्यूएल डेवलपर संस्करण 3.0.02 में, यदि आप क्वेरी के साथ प्रतिस्थापन चर के साथ पूरे ब्लॉक को हाइलाइट/चुनते हैं तो आपको संकेत नहीं दिया जाएगा (रन = एफ 9) – Harrison

 संबंधित मुद्दे

  • कोई संबंधित समस्या नहीं^_^