如何修改oracle中的现有函数

时间:2015-01-12 15:06:21

标签: oracle function sqlplus

我已经创建了像这样的pl / sql函数

CREATE  Function conc(name IN varchar2)
RETURN varchar2 DETERMINISTIC
IS
fn varchar2(30);

BEGIN
    SELECT concat(fname,lname) into fn
    FROM tab1 where fname=name;

    return fn;
End;
/

它已成功创建,没有任何编译错误。 现在我尝试使用replace

更改上面的现有函数
CREATE OR REPLACE Function conc(name IN varchar2)
RETURN varchar2 DETERMINISTIC
IS
fn varchar2(30);

BEGIN
    SELECT concat(lname,fname) into fn
    FROM tab1 where fname=name;

    return fn;
End;
/

此处创建函数时出现编译错误。

有人可以说明为什么会发生这种情况,以及更改现有pl / sql函数定义的最佳方法是什么。

1 个答案:

答案 0 :(得分:0)

您使用的第二个代码没有语法错误'创建或替换'。这是编辑现有函数的正确方法。我能够在我的开发环境中创建它。见下文:



SQL> create table tab1 (
  2  lname varchar2(15),
  3  fname varchar2(15),
  4  create_dt date
  5  )
  6  /

Table created.

SQL> CREATE OR REPLACE Function conc(name IN varchar2)
  2  RETURN varchar2 DETERMINISTIC
  3  IS
  4  fn varchar2(30);
  5  
  6  BEGIN
  7      SELECT concat(lname,fname) into fn
  8      FROM tab1 where fname=name;
  9  
 10      return fn;
 11  End;
 12  /

Function created.




查看错误的方法很少。首先,也是最常见的一个,就是显示错误'正如Alex Pool上面提到的那样。或者,您也可以查询表user_errors(或适当的all_errors)以获取可能需要调试的所有详细信息。请参阅下文,我故意放弃表格以获取错误:



SQL> drop table tab1;

Table dropped.

SQL> CREATE OR REPLACE Function conc(name IN varchar2)
  2  RETURN varchar2 DETERMINISTIC
  3  IS
  4  fn varchar2(30);
  5  
  6  BEGIN
  7      SELECT concat(lname,fname) into fn
  8      FROM tab1 where fname=name;
  9  
 10      return fn;
 11  End;
 12  /

Warning: Function created with compilation errors.

SQL> select line, text  from user_errors where NAME='CONC';

      LINE
----------
TEXT
--------------------------------------------------------------------------------
         8
PL/SQL: ORA-00942: table or view does not exist

         7
PL/SQL: SQL Statement ignored




有趣的是,每次运行语句时,这些表似乎都会被清除。见下文:



SQL> drop Function conc;

Function dropped.

SQL> select line, text  from user_errors where NAME='CONC';

no rows selected

SQL> 




顺便说一句,当您尝试创建功能代码时,您是否收到了系统的任何反馈。您应该期望创建“功能”。'或'警告:使用编译错误创建的功能。'?如果没有,您可能需要检查您的环境设置。希望这有帮助!