oracle存储过程对象无效

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了oracle存储过程对象无效相关的知识,希望对你有一定的参考价值。

create or replace procedure demo1
as
cst int;
Begin
select count(*) into cst from abc1 where sex = 'f' ;
If (cst > 1) then --判断条件
DBMS_OUTPUT.PUT_LINE('有匹配的值:' ||cst);
Else
DBMS_OUTPUT.PUT_LINE('无匹配的值:' ||cst);
End if;
Exception
When others then
Rollback;
End;

然后执行

以下逐行写,不要一写复制进去

begin
demo1;
end;
/

第四行的反斜杠不能省略
参考技术A demo1无效目前看出第五行最后的分号是个全角
在这个过程里你的exception完全没有必要追问

create or replace procedure NoParPro
as
begin
exp test/test@localhost:1521/orcl file=c:\test1027.dmp
;

end;

这样写对么?我想备份数据库可以这样么?
这样应该是备份到本地,如果要备份到另外一台电脑可以么?

追答

这样写完全不对,这是个命令,不是个过程
可以在另外一台电脑,但要安装oracle客户端,建议与服务器oracle是同一版本的

Oracle 错误:无效的 SQL 语句错误

【中文标题】Oracle 错误:无效的 SQL 语句错误【英文标题】:Oracle ERROR : INVALID SQL STATEMENT ERROR 【发布时间】:2018-11-01 00:51:46 【问题描述】:

我做了一个存储过程,但是我不能执行存储过程我不知道是什么问题。

源代码:

Create or replace procedure land_naam(klantnummer_input in VARCHAR2
, verzendland_output out VARCHAR2)

AS 

BEGIN

SELECT land into verzendland_output from klanten 

WHERE klantnummer = klantnummer_input;

END land_naam;

首先我创建过程没有任何错误。

如果我想执行它,我运行代码

Execute land_naam;

之后我得到错误:

ORA-00900: 无效的 SQL 语句

我能做些什么来解决这个问题? The procedure The error statement

【问题讨论】:

据我所知,您将 klantnummer_input 指定为输入参数。你必须为它传递一个值Execute land_naam(some_input_value) 你觉得(klantnummer_input in VARCHAR2 , verzendland_output out VARCHAR2)是什么意思? 仍然得到相同的错误如果我为它传递值,我尝试执行 land_naam('S'); 【参考方案1】:

修改你的代码如下:

Create or replace procedure land_naam(klantnummer_input in VARCHAR2)
AS 
verzendland_output VARCHAR2(2000);
BEGIN
SELECT land into verzendland_output from klanten 
WHERE klantnummer = klantnummer_input;
END land_naam;

执行过程时,既然有输入参数,就提供一个。

e.g. EXECUTE land_naam('S');

【讨论】:

【参考方案2】:

由于您的过程同时指定输入和输出参数,因此您必须在调用过程时指定它们:

要在 SQLPlus 中声明一个保存输出的变量,使用简单

SQL> var out varchar2(100)

然后使用输入和输出参数调用存储过程(否则您没有指定正确的参数数量)

SQL> exec land_naam('yourinput', :out)

最后,打印输出变量的内容

SQL> print out

【讨论】:

我不知道你到底是什么意思

以上是关于oracle存储过程对象无效的主要内容,如果未能解决你的问题,请参考以下文章

Oracle 定义存储过程 不能执行,处于无效状态。

oracle带参数的存储过程,一直提示sql无效sql语句。求高手指点

VBS 调用SQL Server加密存储过程提示:对象关闭时 不允许操作

Oracle 存储过程问题 - IN 和 OUT 变量是无效标识符 [关闭]

在oracle中执行alter存储过程时出现无效表名错误

无效的对象名称 - 存储过程