访问sqlplus中的绑定变量

zig*_*ggy 2 sql plsql sqlplus

在以下示例中,

variable recordId number;

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

PRINT recordid;
SELECT * 
  FROM someothertable 
 WHERE recordkey = &recordId;
Run Code Online (Sandbox Code Playgroud)

最后一行的select语句无法访问recordId的值.我知道我可以recordId使用:recordId 访问pl/sql块内部但是有没有办法recordId在不在pl/sql块中的sql语句中访问?(就像在最后一行).

Ale*_*ole 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;
Run Code Online (Sandbox Code Playgroud)

为绑定变量赋值的稍微更常见的方法是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;
Run Code Online (Sandbox Code Playgroud)