在以下示例中,
variable recordId number;
BEGIN
SELECT MAX(recordvalue)
INTO recordId
FROM sometable;
END;
PRINT recordid;
SELECT *
FROM someothertable
WHERE recordkey = &recordId;
最后一行的select语句无法访问recordId的值。
我知道我可以使用:recordId访问pl / sql块中的recordId
但是有没有办法在不在pl / sql块中的sql语句中访问recordId
? (就像在最后一行)。
答案 0 :(得分: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;