如果我们使用Oracle SQL Developer创建一个新程序,假设TESTPROC
CREATE OR REPLACE PROCEDURE TESTPROC AS
BEGIN
--SOMETHING
END TESTPROC;
并使用CTRL + S保存它并且不运行它,它不会保存为程序吗?如果我们关闭窗口并尝试在程序列表中搜索它,我们无法找到它?
我们是否需要至少运行一次proc来保存它?
以任何方式检索以这种方式丢失的程序?
答案 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数据库无关。
您必须编译该过程才能将其存储到磁盘中。
当我尝试创建一个同名的新程序时,我得到错误对象已经存在
这是因为您没有使用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';