2016-12-27 7 views
0

現在、私は現在の環境でインポートされたMySQLデータベースを使用しています。MySQLバージョンは5.6.xです。今私は私のJavaアプリケーションで使用しなければならない特定のデータベース機能を持っています。問題は次のとおりです。テーブルエイリアスを持つMySQLデータベースの関数を呼び出す

  1. MySQLデータベースはEMPLOYEEです。
  2. MySQL関数FN_GET_USER_CODE(userID INT)は、テーブルEMP_DETAILS_COMPANYのテーブルエイリアス(EMPDTL)を使用し、関数定義でいくつかの結合を使用しています。
  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

テーブルEMP_SECRET_CODEのエイリアス名の前にASが見つからないと思います。

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

関連する問題