2016-12-27 92 views
0

目前我在当前环境中使用了导入的MySQL数据库。我的MySQL版本是5.6.x.现在我有一些数据库函数,我必须在我的Java应用程序中使用。问题如下:使用表别名在MySQL数据库中调用函数

  1. MySQL数据库是EMPLOYEE
  2. MySQL函数FN_GET_USER_CODE(userID INT)已使用表 别名(EMPDTL)EMP_DETAILS_COMPANY并在函数定义中使用了一些连接。
  3. 当我尝试通过命令 select FN_GET_USER_CODE(234599)调用该函数时,它说表格EMPLOYEE.EMPDTL不存在。
  4. Error Code: 1146 Table 'EMPLOYEE.EMPDTL' doesn't exist

功能定义

CREATE DEFINER=`user`@`192.168.0.1` FUNCTION `FN_GET_USER_DETAILS(userID INT) RETURNS VARCHAR(25) CHARSET utf8 
BEGIN 
    DECLARE user_getempcode VARCHAR(100); 
    SELECT DISTINCT(reg.empcode) INTO user_getempcode FROM m_registration_seq_num AS reg 
    INNER JOIN EMP_SECRET_CODE ecd 
    ON reg.tempcd = ecd.secretcd AND reg.lang_cd = ecd.lang_cd 
    RETURN user_getempcode; 
END$$ 

DELIMITER;

任何人都可以知道我在这里失踪。

+0

请分享FN_GET_USER_DETAILS代码 –

+0

功能代码已添加! – k10gaurav

+0

我已经提供了一个答案,请检查 –

回答

-1

我想你是缺少AS之前的别名EMP_SECRET_CODE。它应该是这样的:

CREATE DEFINER=`user`@`192.168.0.1` FUNCTION `FN_GET_USER_DETAILS(userID INT) RETURNS VARCHAR(25) CHARSET utf8 
BEGIN 
    DECLARE user_getempcode VARCHAR(100); 
    SELECT DISTINCT(reg.empcode) INTO user_getempcode FROM m_registration_seq_num AS reg 
    INNER JOIN EMP_SECRET_CODE AS ecd 
    ON reg.tempcd = ecd.secretcd AND reg.lang_cd = ecd.lang_cd 
    RETURN user_getempcode; 
END$$ 
+0

添加'AS'并不是强制性的,因为mysql/oracle会自动将它视为别名。实际上,这是我在上面给出的示例代码。您可以在这里查看实际脚本:https://drive.google.com/file/d/0B2NllJPwZg04VlVsRzRHaWdzeE0/view – k10gaurav

+0

问题已解决。在更新代码片段中,我的数据库中缺少一个表,这就是为什么只有在缺少的表位于子查询内时才遇到问题。感谢您的投入。 – k10gaurav

+0

顺便提一句,请注意,DISTINCT不是一个功能 – Strawberry