ORA -00909 //sql 语句被忽略 ...过程创建时出现编译错误

Posted

技术标签:

【中文标题】ORA -00909 //sql 语句被忽略 ...过程创建时出现编译错误【英文标题】:ORA -00909 //sql statement ignored ...procedure created with compilation errors 【发布时间】:2017-03-28 19:00:41 【问题描述】:
create or replace procedure Pupdate(   
peno in emp.empno%type,  
psal in emp.sal%type,  
pcomm in emp.comm%type)  
IS   
BEGIN  
UPDATE emp SET sal=sal+psal, comm=NVL(comm)+pcomm WHERE empno=peno;  
END Pupdate;  
/

存储过程从用户获取sal 和comm 并将其更新到emp 表中。

【问题讨论】:

请avoid screenshots。另外,错误消息中有什么不清楚的地方? 【参考方案1】:

NVL() 接受两个参数,但我更喜欢 ANSI 标准 COALESCE():

UPDATE emp
    SET sal=sal + psal,
        comm = COALESCE(comm, 0) + COALESCE(pcomm, 0)
WHERE empno = peno;  

【讨论】:

【参考方案2】:
 create or replace procedure Pupdate(   
peno in emp.empno%type,  
psal in emp.sal%type,  
pcomm in emp.comm%type)  
IS   
BEGIN  
UPDATE emp SET sal=sal+psal, comm=NVL(comm,0)+nvl(pcomm,0) WHERE empno=peno;  
END Pupdate;  
/

试试这个。 NVL 类似于 NVL(column_name,value_if_null)。

【讨论】:

以上是关于ORA -00909 //sql 语句被忽略 ...过程创建时出现编译错误的主要内容,如果未能解决你的问题,请参考以下文章

ORA-06550:第 1 行,第 7 列:PLS-00201:必须声明标识符“PAYMENT_UPDATE” ORA-06550:第 1 行,第 7 列:PL/SQL:语句被忽略

ORA-06550:第 1 行,第 7 列:\nPLS-00905:对象 TEST.CMPPROJECTPROC 无效\nORA-06550:第 1 行,第 7 列:\nPL/SQL:语句被忽略&qu

sql语句被忽略并且找不到关键字

ORA-06550:第 12 行,第 9 列:PL/SQL:ORA-00936:缺少表达式 ORA-06550:第 9 行,第 5 列:PL/SQL:忽略 SQL 语句

自定义 SQL 函数 - PL/SQL:语句被忽略

基本 Oracle 触发器审计表