【发布时间】:2013-04-30 15:08:23
【问题描述】:
我创建了一个程序如下
create or replace procedure "GETCUSTNAMEZZz"
(cust_identifier1 IN NVARCHAR2(10))
is
begin
DBMS_OUTPUT.PUT_LINE (FNAME || ' ' || LNAME FROM customer WHERE cust_id=cust_identifier1)
end;
然后我尝试调用该过程
BEGIN
GETCUSTNAMEZZz('C2') ;
END;
这个 sql 给我一个错误,标识符 'GETCUSTNAMEZZZ' 必须声明 ORA-06550:第 3 行,第 5 列:PL/SQL:语句被忽略"
这是我创建的确切过程,并且参数正确。
具体如何声明标识符?
提前致谢。
【问题讨论】:
-
你应该可以如图所示调用它,但记得在执行前输入
SET SERVEROUTPUT ON SIZE 1000(或任何大小)。问题是您的 proc 不存在,因为它没有编译。我看到了一些问题:(1)使用NVARCHAR2而不是NVARCHAR2(10)作为参数,(2)您必须先查询FNAME和LNAME到变量中才能显示它们,(3)行以DBMS_OUTPUT.PUT_LINE开头的代码末尾需要一个分号。如果您创建一个 proc 并获得“created with errors”,请输入“show errors”以查看错误。 -
如果我正确设置了这个,即使 oracle 说创建了过程,它在调用时也可能无法编译??
-
正确 - 如果创建时出现错误,Oracle 仍会让您尝试调用它;它将重新编译,但在您的情况下重新编译将失败。请参阅下面的@DaveCosta 答案。您的 proc 仍然存在问题,但您可以通过不使用双引号为自己省去很多麻烦——它们已经让您付出了代价。
-
如果您在创建数据库对象时使用双引号,并且您不小心使用了大小写混合,那么您注定要使用双引号和 完全相同的大小写随后引用该对象。没有引号,生活就轻松多了。