2010-08-03 54 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;