在 SQLDeveloper 中保存新过程
Saving a new procedure in SQLDeveloper
如果我们使用 Oracle SQL Developer 创建一个新过程,假设 TESTPROC
CREATE OR REPLACE PROCEDURE TESTPROC AS
BEGIN
--SOMETHING
END TESTPROC;
只用CTRL+S保存,不运行,会不会保存为程序?如果我们关闭 window 并尝试在程序列表中搜索它,我们找不到它吗?
我们是否需要至少 运行 proc 一次来保存它?
有什么方法可以找回以这种方式丢失的程序?
CTRL+S - 保存文件。您可以在 OS 中找到此文件。
要在数据库中保存过程,您必须在数据库中创建它。为此,您需要执行 CREATE PROCEDURE
。所以不,你没有在数据库中 "save" 它。
PLSQL Developer 或任何其他客户端只是您与数据库本身对话的工具。您可能正在使用 Toad、sql* 或任何其他界面,它们可能都有自己的工作方式。
你们所谓的运行宁,其实就是所谓的编译。当您 "run" 您提供的语句时,它只会针对您连接的数据库进行编译。如果您调用从 PLSQL 块编译的过程,它实际上只能 运行。
尝试了解数据库服务器和 IDE 之间的差异,然后您会更自如地使用 Oracle。
try to search for it in list of procedures
此查询告诉您数据库中是否存在您的过程
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 ...
just save it using CTRL+S and don't run it, will it not be saved as procedure?
Oracle SQL Developer 是一个 IDE 而不是数据库服务器。它提供了一个 接口 来与 数据库 进行交互。 CTRL + S
是 Windows OS 快捷方式,与 Oracle 数据库无关。
您必须编译程序才能将其存入磁盘。
,
when I am trying to create a new procedure of the same name, i get error object already exists
那是因为您没有使用 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';
如果我们使用 Oracle SQL Developer 创建一个新过程,假设 TESTPROC
CREATE OR REPLACE PROCEDURE TESTPROC AS
BEGIN
--SOMETHING
END TESTPROC;
只用CTRL+S保存,不运行,会不会保存为程序?如果我们关闭 window 并尝试在程序列表中搜索它,我们找不到它吗?
我们是否需要至少 运行 proc 一次来保存它?
有什么方法可以找回以这种方式丢失的程序?
CTRL+S - 保存文件。您可以在 OS 中找到此文件。
要在数据库中保存过程,您必须在数据库中创建它。为此,您需要执行 CREATE PROCEDURE
。所以不,你没有在数据库中 "save" 它。
PLSQL Developer 或任何其他客户端只是您与数据库本身对话的工具。您可能正在使用 Toad、sql* 或任何其他界面,它们可能都有自己的工作方式。
你们所谓的运行宁,其实就是所谓的编译。当您 "run" 您提供的语句时,它只会针对您连接的数据库进行编译。如果您调用从 PLSQL 块编译的过程,它实际上只能 运行。
尝试了解数据库服务器和 IDE 之间的差异,然后您会更自如地使用 Oracle。
try to search for it in list of procedures
此查询告诉您数据库中是否存在您的过程
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 ...
just save it using CTRL+S and don't run it, will it not be saved as procedure?
Oracle SQL Developer 是一个 IDE 而不是数据库服务器。它提供了一个 接口 来与 数据库 进行交互。 CTRL + S
是 Windows OS 快捷方式,与 Oracle 数据库无关。
您必须编译程序才能将其存入磁盘。
when I am trying to create a new procedure of the same name, i get error object already exists
那是因为您没有使用 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';