2016-12-27 61 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