我已经创建了像这样的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函数定义的最佳方法是什么。
答案 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>

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