2010-08-03 26 views
2

在以下示例中,訪問綁定變量在sqlplus

variable recordId number; 

BEGIN 
    SELECT MAX(recordvalue) 
    INTO recordId 
    FROM sometable; 
END; 

PRINT recordid; 
SELECT * 
    FROM someothertable 
WHERE recordkey = &recordId; 

在最後一行的選擇語句不能訪問的recordId的值。 我知道我可以在pl/sql塊中使用:recordId訪問recordId,但是有沒有辦法在不在pl/sql塊中的sql語句中訪問recordId? (如最後一行)。

+0

你爲什麼會做匿名PLSQL塊範圍之外的更多的操作? – 2010-08-03 19:26:51

+0

您也可以在SQL * Plus中使用綁定變量,仍然是':recordId'。 '&'版本會提示輸入值,並且與'variable'版本沒有直接關係。不完全確定你爲什麼要這樣混合搭配。 – 2010-08-03 21:03:45

回答

7

您也可以在SQL * Plus中使用綁定變量,仍爲:recordId&版本將提示輸入值,並且與variable版本沒有直接關係。

variable recordId number; 

BEGIN 
    SELECT MAX(recordvalue) 
    INTO :recordId 
    FROM sometable; 
END; 
/

PRINT recordid; 

SELECT * 
FROM someothertable 
WHERE recordkey = :recordId; 

分配值綁定變量的稍微常見的方式是exec :recordId := value;,但exec真是一個匿名塊只是速記反正。

不知道爲什麼你想這樣混合和匹配。如果目的是使用在後面一個一個查詢的結果,你可以嘗試new_value代替:

column x_val new_value y_val; -- could also noprint if you do not need to see the intermediate value 

SELECT MAX(recordvalue) x_val 
FROM sometable; 

SELECT * 
FROM someothertable 
WHERE recordkey = &y_val;