在SQLDeveloper中保存新过程

时间:2015-11-10 07:45:01

标签: oracle plsql compilation oracle-sqldeveloper

如果我们使用Oracle SQL Developer创建一个新程序,假设TESTPROC

CREATE OR REPLACE PROCEDURE TESTPROC AS 
BEGIN
 --SOMETHING
END TESTPROC;

并使用CTRL + S保存它并且不运行它,它不会保存为程序吗?如果我们关闭窗口并尝试在程序列表中搜索它,我们无法找到它?

我们是否需要至少运行一次proc来保存它?

以任何方式检索以这种方式丢失的程序?

4 个答案:

答案 0 :(得分:2)

CTRL + S - 您保存文件。您可以在操作系统中找到此文件。

要在DB中保存过程,您必须在DB中创建它。为此,您需要执行CREATE PROCEDURE。所以不,你没有把它“保存”在DB中。

答案 1 :(得分:2)

  

尝试在程序列表中搜索<​​/ p>

此查询会告诉您数据库中是否存在您的程序

select * from user_procedures where object_name ='THE NAME OF YOUR PROC'

或者

select * from user_objects where object_type ='PROCEDURE' and OBJECT_NAME='THE NAME OF YOUR PROC'

解决错误object already exists在此过程中添加or replace

create or replace procedure Proc_test ...

答案 2 :(得分:1)

PLSQL Developer或任何其他客户端只是您与数据库本身交谈的工具。您可能正在使用Toad,sql *或任何其他界面,他们可能都有自己的做事方式。

您所谓的正在运行,实际上称为 正在编译 。当你&#34;跑&#34;您提供的语句,它仅针对您连接的数据库进行编译。如果你调用从PLSQL块编译的过程,它只能实际运行。

尝试理解数据库服务器和IDE之间的差异,然后您可以更轻松地使用Oracle。

答案 3 :(得分:1)

  

只需使用CTRL + S保存它并且不运行它,它不会保存为程序吗?

Oracle SQL Developer IDE ,而不是数据库服务器。它提供界面以与数据库进行交互。 CTRL + S是Windows操作系统的快捷方式,与Oracle数据库无关。

您必须编译该过程才能将其存储到磁盘中。

You said

  

当我尝试创建一个同名的新程序时,我得到错误对象已经存在

这是因为您没有使用REPLACE关键字来覆盖现有对象。

让我们看看原因:

SQL> CREATE PROCEDURE foo
  2  AS
  3  BEGIN
  4    NULL;
  5  END;
  6  /

Procedure created.

SQL> CREATE PROCEDURE foo
  2  AS
  3  BEGIN
  4    NULL;
  5  END;
  6  /
CREATE PROCEDURE foo
                 *
ERROR at line 1:
ORA-00955: name is already used by an existing object

如何避免:使用CREATE OR REPLACE

SQL> CREATE OR REPLACE PROCEDURE foo
  2  AS
  3  BEGIN
  4    NULL;
  5  END;
  6  /

Procedure created.

要查看编译过程是否存在于数据库中,请查询 [DBA | ALL | USERS] _PROCEDURES 视图。

有两件事:

  • 独立程序 - 使用object_name作为过滤器
SELECT owner,
  object_name,
  procedure_name,
  object_type
FROM all_procedures
WHERE owner    ='OWNER'
AND object_name='PROC_NAME';
  • 打包程序 - 使用procedure_name作为过滤器
SELECT owner,
  object_name,
  procedure_name,
  object_type
FROM all_procedures
WHERE owner    ='OWNER'
AND procedure_name='PROC_NAME';