Oracle PL/SQL代码中的神秘声明

Igr*_*ek. 1 oracle plsql sqlplus

&nOracle PL/SQL中的这个声明是什么意思?代码示例中的用法(取自此处)如下所示:

DECLARE
    myex EXCEPTION;
    PRAGMA EXCEPTION_INIT(myex,-20015); 
    n NUMBER := &n;
BEGIN
    FOR i IN 1..n LOOP
        dbms_output.put.line(i);
        IF i=n THEN
            RAISE myex;
        END IF;
    END LOOP;
EXCEPTION
    WHEN myex THEN
        dbms_output.put.line('loop is end');
END;
Run Code Online (Sandbox Code Playgroud)

MT0*_*MT0 6

&n是一个替代变量.

在语句中使用替换变量时,SQL*Plus会请求输入值并重写该语句以包含它.重写的语句将传递给数据库.结果,数据库服务器不知道替换变量.