SQL*Plus 不运行 PL/SQL 块

Posted

技术标签:

【中文标题】SQL*Plus 不运行 PL/SQL 块【英文标题】:SQL*Plus does not run PL/SQL block 【发布时间】:2020-04-12 21:09:34 【问题描述】:

我在 SQL*Plus 中运行我的 PL/SQL 脚本时遇到问题。我可以正常运行 SQL 命令,但是当我想运行任何 PL/SQL 代码时,它什么也没有。请参阅下面的代码和输出。

DECLARE
    x_salary employee.salary%TYPE;
BEGIN
    select salary
    into x_salary
    from employee
    where ssn=&enter_ssn;

    --Output the result
    DBMS_OUTPUT.PUT_LINE('Salary is ' || x_salary);

EXCEPTION
    --Output when no records are returned
    WHEN no_data_found THEN
        DBMS_OUTPUT.PUT_LINE ('No employee found');

    WHEN others THEN
        DBMS_OUTPUT.PUT_LINE ('Error encountered, but cause unknown');
END;

【问题讨论】:

分号后加斜线 END 之后?还是在命令行中? 在命令行中。 @BarbarosÖzhan - “在命令行中”是什么意思? OP 说这是一个 script - 这意味着他没有以交互方式运行它。斜线应该在 END 之后;单独换行。 @BarbarosÖzhan - 啊,哈哈 - 不,我通常不打开图像。但即便如此,反斜杠还是属于脚本,而不是在它之后......(我确实明白你的意思。) 【参考方案1】:

PL/SQL过程在sqlplus下过程定义后需要/

DECLARE
 ...
BEGIN
 ...
END;

/

【讨论】:

如果这个答案对你有帮助,请考虑将其标记为答案。谢谢【参考方案2】:

在脚本中 END; 之后的新行中添加一个斜杠 /

来自documentation:

您必须在每个 SQL 命令的末尾包含一个分号,并在文件中每个 PL/SQL 块之后的一行中单独包含一个斜杠 (/)

然后在 SQL*Plus 命令行中执行 SQL 文件为:

@C:\your_script.sql;

【讨论】:

以上是关于SQL*Plus 不运行 PL/SQL 块的主要内容,如果未能解决你的问题,请参考以下文章

PL/SQL编程_存储程序

pl/sql developer中写SQL时出现ORA-06550和PLS-00553

如何将 PL/SQL .sql 文件转换为 SQL*PLUS,以便它可以与 Windows 任务计划程序一起运行

创建一个PL/SQL块,计算一年的补偿金额。

PL/SQL 编译失败时如何让 SQL*Plus 退出

PL/SQL 块需要大量时间来执行