我有一个sql文件,其中包含一个打印“Hi”的简单程序,如
CREATE OR REPLACE PROCEDURE skeleton
IS
BEGIN
DBMS_OUTPUT.PUT_LINE('Hi');
END;
当我尝试从sql文件本身执行此操作时,它只是被编译并且它没有运行。
我添加了as,
CREATE OR REPLACE PROCEDURE skeleton
IS
BEGIN
DBMS_OUTPUT.PUT_LINE('Hi');
END;
/ /* this is required else it throws me compilation error*/
set serveroutput on
EXECUTE skeleton;
我尝试从其他sql文件调用相同的框架,甚至从sqldeveloper GUI调用,也没有执行此操作。只有sqlplus命令行可以帮助我。让我知道我错过了什么以及解决方案。
答案 0 :(得分:2)
以下是我使用SQL Plus
采取的步骤SQL> CREATE OR REPLACE PROCEDURE skeleton
2 IS
3 BEGIN
4 DBMS_OUTPUT.PUT_LINE('Hi');
5 END;
6 /
Procedure created.
SQL> set serveroutput on
SQL> EXECUTE skeleton;
Hi
PL/SQL procedure successfully completed.
SQL>
你能开始一个新的sqlplus会话复制这些步骤并发布内容吗?
答案 1 :(得分:1)
我必须对您的sql进行的唯一更改是允许将其作为@file运行,以删除注释。这是.sql文件的全部内容:
CREATE OR REPLACE PROCEDURE skeleton
IS
BEGIN
DBMS_OUTPUT.PUT_LINE('Hi');
END;
/
set serveroutput on
EXECUTE skeleton;
你应该得到这样的输出:
C:\Temp>sqlplus username/password @skeleton.sql
SQL*Plus: Release 11.1.0.6.0 - Production on Mon Oct 5 17:10:46 2009
Copyright (c) 1982, 2007, Oracle. All rights reserved.
Connected to:
Oracle Database 11g Enterprise Edition Release 11.1.0.6.0 - 64bit Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options
Procedure created.
Hi
PL/SQL procedure successfully completed.
SQL>
答案 2 :(得分:0)
在SQL Developer中,您需要“执行脚本”按钮,它是左上角的第二个按钮(文档前面的绿色小箭头),而不是带有绿色大箭头的按钮。
我第一次使用它时就把它扔了。
(来源:devshed.com)
您的第一个示例被编译而未运行的原因是您实际上并没有要求它运行。您正在数据库中创建一个过程,该过程可以正常工作,但不能调用它。在你的第二个区块中,你有一个EXECUTE
,它就是它实际运行的地方。
答案 3 :(得分:0)
尝试在dbms_output之前设置set serveroutput。