oracle - 如何调用 plsql 过程

标签 oracle plsql procedure

我创建了一个程序如下

 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:语句被忽略”

这正是我创建的过程,而且参数是正确的。

我究竟该如何声明标识符??

提前致谢。

最佳答案

“必须声明标识符”错误的原因是区分大小写。

Oracle 标识符通常会自动转换为全部大写,但是当您将它们括在双引号中时,大小写会保留。所以这个:

create or replace procedure "GETCUSTNAMEZZz"

创建一个具有确切名称“GETCUSTNAMEZZz”的过程,同时:

create or replace procedure GETCUSTNAMEZZz

将创建一个具有确切名称“GETCUSTNAMEZZZ”(全部大写)的过程。

调用过程时没有使用引号。所以它正在寻找不存在的“GETCUSTNAMEZZZ”,因为您将其创建为“GETCUSTNAMEZZz”。

通常,我会建议完全避免使用双引号,因为它们只会造成这种困惑,而不会提供太多好处。可悲的是,许多用于生成代码的工具都喜欢将它们到处粘贴。

(请注意,这是关于标识符而不是字符串值。当您比较字符串值(例如“这是一个字符串”)和/或变量(例如 VARCHAR2 类型的变量)时,大小写总是很重要。)

关于oracle - 如何调用 plsql 过程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16405901/

相关文章:

sql - 语句 'for update' 是如何工作的?

mysql - 数据库中的数据库(表设计)

sql - 以 block 的形式移动大量数据

json - 我们可以在不使用循环的情况下获得oracle中列表属性的总和吗?

mysql - Google SQL replica 需要上传 View 的程序和函数

mysql - 在 MySQL 过程中添加用于编号的新列

delphi - 为什么在执行我的应用程序的第一行代码之前调用 TObject.Free?

java - javax.persistence.SequenceGenerator和分配大小

sql - Oracle 流和物化 View 之间的区别

oracle - 查找Oracle 10g中任何父节点的所有子节点