доступ к переменной связывания в sqlplus - PullRequest
2 голосов
/ 03 августа 2010

В следующем примере

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, но есть ли способ получить доступ к recordId в выражении sql, которого нет в блоке pl / sql?(как в последней строке).

1 Ответ

7 голосов
/ 04 августа 2010

Вы также можете использовать переменные связывания в 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;
...