2012-07-02 11 views
5

SQL सर्वर में, मैं इस तरह के स्थानीय चर परिभाषित कर सकता हूं।ओरेकल में स्थानीय चर को परिभाषित करने का सबसे आसान तरीका क्या है?

declare @id number := 1000 

select * from tbl_A where id = @id; 
select * from tbl_B where id = @id; 

यह बहुत सुविधाजनक है। मैंने PL/SQL में एक ही चीज़ करने की कोशिश की लेकिन यह काम नहीं करता है।

DECLARE id number; 
select 1000 into id from dual; 

क्या आप कुछ ऐसा करने के बारे में जानते हैं? सबसे सरल तरीका मेरा उद्देश्य है।

उत्तर

9

आप PL/SQL में एक स्थानीय चर को परिभाषित करना चाहते हैं, तो आप एक पूरा PL/SQL ब्लॉक की जरूरत है

DECLARE 
    id NUMBER; 
BEGIN 
    SELECT 1000 
    INTO id 
    FROM dual; 
END; 

या सिर्फ

DECLARE 
    id NUMBER := 1000; 
BEGIN 
    <<do something that uses the local variable>> 
END; 

आप एसक्यूएल में एक चर घोषित करने के लिए चाहते हैं * प्लस

SQL> variable id number 
SQL> begin 
     select 1000 into :id from dual; 
    end; 
    /

SQL> print id 

     ID 
---------- 
     1000 

SQL> SELECT * FROM tbl_a WHERE id = :id 
0

मैं Oracle पर इस की कोशिश की और यह काम किया:

> DEF x = TOTO 
> SELECT '&x' FROM dual; 

परिणाम होगा: पूर्ण

0

जनरल PL/SQL में चर घोषित करने के लिए वाक्य रचना

var_nm डेटाप्रकार है [नहीं NULL: = var_value];

  • var_nn चर का नाम है।
  • डेटाटाइप एक वैध पीएल/एसक्यूएल डेटाटाइप है।
  • नहीं NULL चर पर एक वैकल्पिक विनिर्देश है जो इस चर को शून्य मान असाइन नहीं किया जा सकता है।
  • var_value या DEFAULT मान भी एक वैकल्पिक विनिर्देश है, जहां आप कुछ विशिष्ट मान के साथ एक चर प्रारंभ कर सकते हैं।
  • प्रत्येक परिवर्तनीय घोषणा एक अलग कथन है और इसे अर्धविराम से समाप्त किया जाना चाहिए।

हम निम्नलिखित दो तरीकों में से एक में चर के मूल्य प्रदान कर सकते हैं - (। उदाहरण के लिए var_nm:= var_value;)

  1. प्रत्यक्ष काम
  2. select from का उपयोग
(उदाहरण के लिए SELECT col_nm INTO var_nm FROM tbl_nm [WHERE clause];।)

आपके मामले में जस्टिन गुफा पहले ही उल्लेख कर चुका है कि यह

हो सकता है
DECLARE 
id number; 
BEGIN 
SELECT 1000 into id from dual; 
dbms_output.put_line('id : '|| id); 
END; 
/

या

DECLARE 
id number := 1000; 
BEGIN 
dbms_output.put_line('id : '|| id); 
END; 
/

नोट: '/' यानी वापस के बाद अंत कीवर्ड PL/SQL ब्लॉक ऊपर निष्पादित करने के लिए इंगित करता है स्लेश।

0

ब्लॉक की घोषणा करने के लिए एक वैकल्पिक खंड के साथ एक प्रयोग है:

WITH my_params AS (
    SELECT 123 AS min_id FROM DUAL 
) 
SELECT * 
FROM some_table 
WHERE id > (SELECT min_id FROM my_params) 

यह अधिक है पोर्टेबल के रूप में कई विक्रेताओं खंड के साथ समर्थन करते हैं और आप एक गतिशील मान के लिए पैरामीटर से सहज बदल सकते हैं। उदाहरण के लिए:

WITH my_params AS (
    SELECT min(id) AS min_id FROM some_id_table 
) 
SELECT * 
FROM some_table 
WHERE id > (SELECT min_id FROM my_params) 
संबंधित मुद्दे

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