Oracle Can';不要使用输入pl/sql

Oracle Can';不要使用输入pl/sql,oracle,plsql,Oracle,Plsql,我对PL/SQL非常陌生,所以如果解决方案显而易见,请原谅我。我试图让用户输入一些变量,但我根本不能使用这些变量。下面是代码示例: SET SERVEROUTPUT ON; ACCEPT MaxRecords INTEGER := PROMPT 'Enter the number of records to input:'; DECLARE MaxRecords INTEGER; BEGIN IF MaxRecords > 1000 THEN MaxReco

我对PL/SQL非常陌生,所以如果解决方案显而易见,请原谅我。我试图让用户输入一些变量,但我根本不能使用这些变量。下面是代码示例:

SET SERVEROUTPUT ON;
ACCEPT MaxRecords INTEGER := PROMPT 'Enter the number of records to input:';
DECLARE
    MaxRecords INTEGER;
BEGIN
    IF MaxRecords > 1000 THEN
        MaxRecords := 1000;
        dbms_output.put_line('You cannot input more than 1,000 records.');
    END IF;
    dbms_output.put_line('Number of records to input: ' || MaxRecords);
END;
我得到的只是“要输入的记录数:”不管我在MaxRecords中输入了什么。如果数字大于1000,则不通过if语句

SET SERVEROUTPUT ON;
ACCEPT MaxRec INTEGER := PROMPT 'Enter the number of records to input:';
DECLARE
    MaxRecords INTEGER:=&MaxRec;
BEGIN
    IF MaxRecords > 1000 THEN
        MaxRecords := 1000;
        dbms_output.put_line('You cannot input more than 1,000 records.');
    END IF;
    dbms_output.put_line('Number of records to input: ' || MaxRecords);
END;
&强制sql替换MaxRec

SQLPLUS接受示例:

SQL> accept foo
1
SQL> select &foo from dual;
old   1: select &foo from dual
new   1: select 1 from dual

假设您的最终目标是让客户机输入多达1000个值(而不是只接受一个值并编写一行输出),那么实际上您不能。PL/SQL在服务器上运行,因此无法在PL/SQL循环中实际嵌入SQLPlus命令,如
ACCEPT
。在SQLPlus中进行某种循环(几乎)是不可能的,但它非常痛苦,应该像瘟疫一样避免。好吧,这似乎有效。但是为什么我必须使用不同的变量呢?第一个变量实际上不是PL/SQL变量,但是您可以尝试使用相同的名称。我不明白你得到了什么。可读性?我不明白“不是真正的PL/SQL变量”是什么意思。这不都是PL/SQL吗?accept是sqlplus语法。宣布…开始。。。最后一部分是PL/SQLI,在文章中添加了一个纯sqlplus版本。