PL/SQL 块中预期出现外部语言错误
Expecting external language error in PL/SQL block
您好,我正在编写一个数据转换函数,但似乎出现了一个语法错误,我这辈子都无法弄清楚。另外,如果您发现我可以在我的代码中做出任何错误或改进,请告诉我。我得到的错误是 FOUND V_GMIN expecting: EXTERNAL LANGUAGE
CREATE OR REPLACE PACKAGE pkg_user_info
IS
function get_gmin(i_user_id IN EZ01USERMAST.USER_ID%TYPE)
RETURN VARCHAR2
IS
V_GMIN EZ01USERMAST.GMIN;
BEGIN
select GMIN
into V_GMIN
from EZ01USERMAST
where user_id= i_user_id
and rownum = 1;
return V_GMIN;
EXCEPTION WHEN OTHERS THEN
return null;
END get_gmin;
end pkg_user;
/
以下是一些样式和语法提示:
WHEN OTHERS THEN return null;这只会吞下所有可能发生的错误。它可能会导致数小时的痛苦调试。尝试
当其他人那么
--使用自主事务日志包记录错误
增加;
结束;
- V_GMINEZ01USERMAST.GMIN;什么是 EZ01USERMAST.GMIN?你是说 EZ01USERMAST.GMIN%type 吗?
- 为什么在选择 user_id 时添加 rownum =1?如果我有两个具有相同 ID 的用户,我想知道它。
此外,如果您真的想创建一个包而不仅仅是一个函数,则包由两部分组成,一个规范和一个主体。并且您在 end 语句中给出的名称与顶部 create 语句中的名称不同。我冒昧地编辑了代码,因此 select 位于它自己的匿名块中,并且会引发任何异常。仍然可以使用更好的错误处理,但我会把它留给你。通常也尝试从一个地方 return。
CREATE OR REPLACE PACKAGE pkg_user_info AS
function get_gmin(i_user_id IN EZ01USERMAST.USER_ID%TYPE) RETURN EZ01USERMAST.USER_ID%TYPE;
END pkg_user_info;
/
CREATE OR REPLACE PACKAGE BODY pkg_user_info AS
function get_gmin(i_user_id IN EZ01USERMAST.USER_ID%TYPE) RETURN EZ01USERMAST.USER_ID%TYPE IS
V_GMIN EZ01USERMAST.USER_ID%TYPE := NULL;
BEGIN
BEGIN
select GMIN
into V_GMIN
from EZ01USERMAST
where user_id = i_user_id
and rownum = 1;
EXCEPTION
WHEN OTHERS THEN
RAISE;
END;
RETURN V_GMIN;
END get_gmin;
END pkg_user_info;
/
这里的问题是你忘记在body的包声明中放入关键字BODY。编译器需要此处的规范声明。
您好,我正在编写一个数据转换函数,但似乎出现了一个语法错误,我这辈子都无法弄清楚。另外,如果您发现我可以在我的代码中做出任何错误或改进,请告诉我。我得到的错误是 FOUND V_GMIN expecting: EXTERNAL LANGUAGE
CREATE OR REPLACE PACKAGE pkg_user_info
IS
function get_gmin(i_user_id IN EZ01USERMAST.USER_ID%TYPE)
RETURN VARCHAR2
IS
V_GMIN EZ01USERMAST.GMIN;
BEGIN
select GMIN
into V_GMIN
from EZ01USERMAST
where user_id= i_user_id
and rownum = 1;
return V_GMIN;
EXCEPTION WHEN OTHERS THEN
return null;
END get_gmin;
end pkg_user;
/
以下是一些样式和语法提示:
WHEN OTHERS THEN return null;这只会吞下所有可能发生的错误。它可能会导致数小时的痛苦调试。尝试
当其他人那么 --使用自主事务日志包记录错误 增加; 结束;
- V_GMINEZ01USERMAST.GMIN;什么是 EZ01USERMAST.GMIN?你是说 EZ01USERMAST.GMIN%type 吗?
- 为什么在选择 user_id 时添加 rownum =1?如果我有两个具有相同 ID 的用户,我想知道它。
此外,如果您真的想创建一个包而不仅仅是一个函数,则包由两部分组成,一个规范和一个主体。并且您在 end 语句中给出的名称与顶部 create 语句中的名称不同。我冒昧地编辑了代码,因此 select 位于它自己的匿名块中,并且会引发任何异常。仍然可以使用更好的错误处理,但我会把它留给你。通常也尝试从一个地方 return。
CREATE OR REPLACE PACKAGE pkg_user_info AS
function get_gmin(i_user_id IN EZ01USERMAST.USER_ID%TYPE) RETURN EZ01USERMAST.USER_ID%TYPE;
END pkg_user_info;
/
CREATE OR REPLACE PACKAGE BODY pkg_user_info AS
function get_gmin(i_user_id IN EZ01USERMAST.USER_ID%TYPE) RETURN EZ01USERMAST.USER_ID%TYPE IS
V_GMIN EZ01USERMAST.USER_ID%TYPE := NULL;
BEGIN
BEGIN
select GMIN
into V_GMIN
from EZ01USERMAST
where user_id = i_user_id
and rownum = 1;
EXCEPTION
WHEN OTHERS THEN
RAISE;
END;
RETURN V_GMIN;
END get_gmin;
END pkg_user_info;
/
这里的问题是你忘记在body的包声明中放入关键字BODY。编译器需要此处的规范声明。