質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

90.37%

  • Java

    16479questions

    Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

  • SQL Server

    756questions

    SQL Serverはマイクロソフトのリレーショナルデータベース管理システムです。データマイニングや多次元解析など、ビジネスインテリジェンスのための機能が備わっています。

ストアドプロシージャから結果を取得したい

解決済

回答 3

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 479

satouyuuya

score 3

 前提・実現したいこと

Javaでシステム開発をしているのですが、SQLServerを使用しデータを取り出したいです。
いま問題となっているのはストアドプロシージャでの結果取得についてです。

私自身前任者から引き継いだばかりのプログラム初心者な上SQLのことはわかりませんので、
本当に申し訳ないですが状況説明すら間違えてる可能性があります。

やりたいことは、
SQLに名簿があり
ストアドプロシージャを実行すると条件にあった人物が表示されるというものです。

 発生している問題・エラーメッセージ

SQLManagementStudio上でストアドプロシージャ実行し、条件にあった検索結果は出て、returnVolumeが0となっています。
上司はSQLは出来るのですがJavaは出来きず、私が未熟なので結果テーブルが取り出せません。

ストアド実行画面

 該当のソースコード

USE [Dcat]
GO
/****** Object:  StoredProcedure [dbo].[getExamineeRs]    Script Date: 2018/11/22 15:30:16 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO

-- =============================================
-- Author:        <Author,,Name>
-- Create date: <Create Date,,>
-- Description:    <Description,,>
-- =============================================
ALTER PROCEDURE [dbo].[getExamineeRs] 
    -- Add the parameters for the stored procedure here
    @p_name    as nvarchar(50) = null,
    @p_kananame as  nvarchar(50) = null,
    @p_birth as date = null

AS
BEGIN
    -- SET NOCOUNT ON added to prevent extra result sets from
    -- interfering with SELECT statements.
    SET NOCOUNT ON;

    -- Insert statements for procedure here

    declare @return int
    set @return = 0

    select @p_name = ltrim(rtrim(@p_name))

    if (@p_name is null) and (@p_kananame is null) and (@p_birth is null) begin
        --SELECT
        --   [ExamineeId]
        --  ,[ImportGroupId]
        --  ,[ResidentNumber]
        --  ,[ApoDate]
        --  ,[TestDate]
        --  ,[Name]
        --  ,[KanaName]
        --  ,[Gender]
        --  ,[Birth]
        --  ,[Age]
        --  ,[RankId]
        --  ,[LastTestId]
        --  ,[Status]
        --  ,[DeleteFlag]
        --  ,[CreateDate]
        --  ,[CreateUser]
        --  ,[UpdateDate]
        --  ,[UpdateUser]
     -- FROM [dbo].[MExaminee]

        set @return = 200

    end else begin
        if (@p_name is not null) and (@p_kananame is not null) and (@p_birth is not null) begin        
            select
               [ExamineeId]
              ,[ImportGroupId]
              ,[ResidentNumber]
              ,[ApoDate]
              ,[TestDate]
              ,[Name]        = LTRIM(RTRIM([Name]))
              ,[KanaName]    = LTRIM(RTRIM([KanaName]))
              ,[Gender]
              ,[Birth]
              ,[Age]
              ,[RankId]
              ,[LastTestId]
              ,[Status]
              ,[DeleteFlag]
              ,[CreateDate]
              ,[CreateUser]
              ,[UpdateDate]
              ,[UpdateUser]
            FROM [dbo].[MExaminee]
            where
                [Name] = @p_name
            and [KanaName] = @p_kananame
            and [Birth] = @p_birth
        end else begin
            if (@p_name is not null) and (@p_kananame is not null) begin
                select
                   [ExamineeId]
                  ,[ImportGroupId]
                  ,[ResidentNumber]
                  ,[ApoDate]
                  ,[TestDate]
                  ,[Name]        = LTRIM(RTRIM([Name]))
                  ,[KanaName]    = LTRIM(RTRIM([KanaName]))
                  ,[Gender]
                  ,[Birth]
                  ,[Age]
                  ,[RankId]
                  ,[LastTestId]
                  ,[Status]
                  ,[DeleteFlag]
                  ,[CreateDate]
                  ,[CreateUser]
                  ,[UpdateDate]
                  ,[UpdateUser]
                FROM [dbo].[MExaminee]
                where
                    [Name] = @p_name
                and [KanaName] = @p_kananame
                -- and [Birth] = @p_birth
            end else begin
                if (@p_name is not null) and (@p_birth is not null) begin
                    select
                       [ExamineeId]
                      ,[ImportGroupId]
                      ,[ResidentNumber]
                      ,[ApoDate]
                      ,[TestDate]
                      ,[Name]        = LTRIM(RTRIM([Name]))
                      ,[KanaName]    = LTRIM(RTRIM([KanaName]))
                      ,[Gender]
                      ,[Birth]
                      ,[Age]
                      ,[RankId]
                      ,[LastTestId]
                      ,[Status]
                      ,[DeleteFlag]
                      ,[CreateDate]
                      ,[CreateUser]
                      ,[UpdateDate]
                      ,[UpdateUser]
                    FROM [dbo].[MExaminee]
                    where
                        [Name] = @p_name
                    -- and [KanaName] = @p_kananame
                    and [Birth] = @p_birth
                end else begin
                    if (@p_kananame is not null) and (@p_birth is not null) begin
                        select
                           [ExamineeId]
                          ,[ImportGroupId]
                          ,[ResidentNumber]
                          ,[ApoDate]
                          ,[TestDate]
                          ,[Name]        = LTRIM(RTRIM([Name]))
                          ,[KanaName]    = LTRIM(RTRIM([KanaName]))
                          ,[Gender]
                          ,[Birth]
                          ,[Age]
                          ,[RankId]
                          ,[LastTestId]
                          ,[Status]
                          ,[DeleteFlag]
                          ,[CreateDate]
                          ,[CreateUser]
                          ,[UpdateDate]
                          ,[UpdateUser]
                        FROM [dbo].[MExaminee]
                        where
                        --    [Name] = @p_name
                            [KanaName] = @p_kananame
                        and [Birth] = @p_birth
                    end else begin
                        if (@p_name is not null) begin
                            select
                               [ExamineeId]
                              ,[ImportGroupId]
                              ,[ResidentNumber]
                              ,[ApoDate]
                              ,[TestDate]
                              ,[Name]        = LTRIM(RTRIM([Name]))
                              ,[KanaName]    = LTRIM(RTRIM([KanaName]))
                              ,[Gender]
                              ,[Birth]
                              ,[Age]
                              ,[RankId]
                              ,[LastTestId]
                              ,[Status]
                              ,[DeleteFlag]
                              ,[CreateDate]
                              ,[CreateUser]
                              ,[UpdateDate]
                              ,[UpdateUser]
                            FROM [dbo].[MExaminee]
                            where
                                [Name] = @p_name
                            --    [KanaName] = @p_kananame
                            -- and [Birth] = @p_birth
                        end else begin
                            if (@p_kananame is not null) begin
                                select
                                   [ExamineeId]
                                  ,[ImportGroupId]
                                  ,[ResidentNumber]
                                  ,[ApoDate]
                                  ,[TestDate]
                                  ,[Name]        = LTRIM(RTRIM([Name]))
                                  ,[KanaName]    = LTRIM(RTRIM([KanaName]))
                                  ,[Gender]
                                  ,[Birth]
                                  ,[Age]
                                  ,[RankId]
                                  ,[LastTestId]
                                  ,[Status]
                                  ,[DeleteFlag]
                                  ,[CreateDate]
                                  ,[CreateUser]
                                  ,[UpdateDate]
                                  ,[UpdateUser]
                                FROM [dbo].[MExaminee]
                                where
                                --    [Name] = @p_name
                                    [KanaName] = @p_kananame
                                -- and [Birth] = @p_birth
                            end else begin
                                if (@p_birth is not null) begin
                                    select
                                       [ExamineeId]
                                      ,[ImportGroupId]
                                      ,[ResidentNumber]
                                      ,[ApoDate]
                                      ,[TestDate]
                                      ,[Name]        = LTRIM(RTRIM([Name]))
                                      ,[KanaName]    = LTRIM(RTRIM([KanaName]))
                                      ,[Gender]
                                      ,[Birth]
                                      ,[Age]
                                      ,[RankId]
                                      ,[LastTestId]
                                      ,[Status]
                                      ,[DeleteFlag]
                                      ,[CreateDate]
                                      ,[CreateUser]
                                      ,[UpdateDate]
                                      ,[UpdateUser]
                                    FROM [dbo].[MExaminee]
                                    where
                                    --    [Name] = @p_name
                                    --    [KanaName] = @p_kananame
                                        [Birth] = @p_birth
                                end
                            end
                        end
                    end
                end
            end
        end 
    end

    return (@return)
END
        try {
            ResultSet rs = Sql.exec(true, "getExamineeRs", params.name, params.kanaName, params.birth);
            DataTable tbl = new DataTable(rs);

//            DataTable tbl = new DataTable("MExaminee");
            tbl.setLabelMap(
                    "Name", "名前",
                    "KanaName", "フリガナ",
                    "Birth", "生年月日",
                    "Gender", "性別",
                    "ExamineeId", "ID"
            );
            tbl.addHtml(0, "<td><input type=\"button\" value=\"選択\" onclick=\"rowClick(this);\"></td>");
            out.write(tbl.getTable());

        } catch (SQLException e) {
            throw new UserRuntimeException(e);
        }

 試したこと

上司は出来るということなので、
色々調べてたのですが、returnVolume以外を取り出す方法がわかりませんでした。

追記
ここで質問したあと3日ほど調べていたら上司の説明通り
「SELECT結果とReturn値の両方を返すストアドからの値取得」が出来るみたいなので頑張っていました。
http://new-pill.hatenablog.com/entry/2017/01/27/174113
しかし、いくらやってもやはり出てきませんでした。(自分が下手なせいかもしれませんが

 補足情報(FW/ツールのバージョンなど)

Java1.8
SQLServer2017

  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 3

checkベストアンサー

+1

少なくとも、ストアドプロシージャが返している値が returnValue だけなので、検索結果は取得できません。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2018/11/26 12:41

    そういうアドバイス、ありがとうございます。
    今本当に苦戦していて私は出来ないことを証明するのに時間を取られてます。

    具体的に何故出来ないとかわかりますでしょうか?
    私自身、ここで質問したあと3日ほど調べていたら上司の説明通り
    「SELECT結果とReturn値の両方を返すストアドからの値取得」が出来るみたいなので今頑張っていました。
    http://new-pill.hatenablog.com/entry/2017/01/27/174113
    しかし、いくらやってもやはり出てきませんでした。(自分が下手なせいかもしれませんが

    キャンセル

  • 2018/11/26 16:26

    この質問に書かれていないSqlクラス?の実装次第なところもありますが、CallableStatementの結果が得られれば検索結果が取得できるのかもしれません。

    キャンセル

  • 2018/11/27 14:06

    色々考えていただきありがとうございます。
    私もその辺りを考えてやってみて出来なかったので上司とワイワイ言い合った結果全然違うストアドプロシージャを渡され解決?しました。(根本的に何が悪いのかわかりませんが無事プログラムは正常に出力だれました)

    キャンセル

+1

下記のリンク先で説明されている通りoutパラメータを使用するとreturnとは別に検索結果を返すことができると思いますが、
まずは上司の方が『出来る』と言っている根拠がoutパラメータのことを指しているのか確認された方がいいと思います。

出力パラメーターがあるストアド プロシージャの使用

以上ご参考まで。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2018/11/27 13:51

    情報ありがとうございます。
    上司曰く、そのoutパラメータのことらしいです。

    キャンセル

0

解決方法・事故解決と言って良いのかわかりませんが、上司と言い争った結果ストアドプロシージャ自体を変更して問題なく動作しました。
不要かと思いますが、変更したストアドプロシージャを載せておきます。

結果画面

USE [Dcat]
GO
/****** Object:  StoredProcedure [dbo].[getExamineeRs]    Script Date: 2018/11/27 14:09:23 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO

-- =============================================
-- Author:        <Author,,Name>
-- Create date: <Create Date,,>
-- Description:    <Description,,>
-- =============================================
ALTER PROCEDURE [dbo].[getExamineeRs] 
    -- Add the parameters for the stored procedure here
    @p_name    as nvarchar(50) = null,
    @p_kananame as  nvarchar(50) = null,
    @p_birth as date = null

AS
BEGIN
    -- SET NOCOUNT ON added to prevent extra result sets from
    -- interfering with SELECT statements.
    SET NOCOUNT ON;

    -- Insert statements for procedure here

    declare @return int
    set @return = 0

    select @p_name = ltrim(rtrim(@p_name))
    select @p_kananame = ltrim(rtrim(@p_kananame))

    if len(@p_name) <= 2 begin set @p_name = Null end
    if len(@p_kananame) < 1 begin set @p_kananame = Null end
    if @p_birth <= '1900/1/1' begin set @p_birth = Null end

    --select @p_name,@p_kananame,@p_birth

    if (@p_name is null) and (@p_kananame is null) and (@p_birth is null) begin
        --SELECT
        --   [ExamineeId]
        --  ,[ImportGroupId]
        --  ,[ResidentNumber]
        --  ,[ApoDate]
        --  ,[TestDate]
        --  ,[Name]
        --  ,[KanaName]
        --  ,[Gender]
        --  ,[Birth]
        --  ,[Age]
        --  ,[RankId]
        --  ,[LastTestId]
        --  ,[Status]
        --  ,[DeleteFlag]
        --  ,[CreateDate]
        --  ,[CreateUser]
        --  ,[UpdateDate]
        --  ,[UpdateUser]
     -- FROM [dbo].[MExaminee]

        set @return = 0

    end else begin
        if (@p_name is not null) and (@p_kananame is not null) and (@p_birth is not null) begin        
            select
               [ExamineeId]
              ,[ImportGroupId]
              ,[ResidentNumber]
              ,[ApoDate]
              ,[TestDate]
              ,[Name]        = LTRIM(RTRIM([Name]))
              ,[KanaName]    = LTRIM(RTRIM([KanaName]))
              ,[Gender]
              ,[Birth]
              ,[Age]
              ,[RankId]
              ,[RankName] -- ★
              ,[TestTime] -- ★
              ,[LastTestId]
              ,[Status]
              ,[DeleteFlag]
              ,[CreateDate]
              ,[CreateUser]
              ,[UpdateDate]
              ,[UpdateUser]
            FROM [dbo].[MExaminee]
            where
                [Name] = @p_name
            and [KanaName] = @p_kananame
            and [Birth] = @p_birth
        end else begin
            if (@p_name is not null) and (@p_kananame is not null) begin
                select
                   [ExamineeId]
                  ,[ImportGroupId]
                  ,[ResidentNumber]
                  ,[ApoDate]
                  ,[TestDate]
                  ,[Name]        = LTRIM(RTRIM([Name]))
                  ,[KanaName]    = LTRIM(RTRIM([KanaName]))
                  ,[Gender]
                  ,[Birth]
                  ,[Age]
                  ,[RankId]
                  ,[RankName] -- ★
                  ,[TestTime] -- ★
                  ,[LastTestId]
                  ,[Status]
                  ,[DeleteFlag]
                  ,[CreateDate]
                  ,[CreateUser]
                  ,[UpdateDate]
                  ,[UpdateUser]
                FROM [dbo].[MExaminee]
                where
                    [Name] = @p_name
                and [KanaName] = @p_kananame
                -- and [Birth] = @p_birth
            end else begin
                if (@p_name is not null) and (@p_birth is not null) begin
                    select
                       [ExamineeId]
                      ,[ImportGroupId]
                      ,[ResidentNumber]
                      ,[ApoDate]
                      ,[TestDate]
                      ,[Name]        = LTRIM(RTRIM([Name]))
                      ,[KanaName]    = LTRIM(RTRIM([KanaName]))
                      ,[Gender]
                      ,[Birth]
                      ,[Age]
                      ,[RankId]
                      ,[RankName] -- ★
                      ,[TestTime] -- ★
                      ,[LastTestId]
                      ,[Status]
                      ,[DeleteFlag]
                      ,[CreateDate]
                      ,[CreateUser]
                      ,[UpdateDate]
                      ,[UpdateUser]
                    FROM [dbo].[MExaminee]
                    where
                        [Name] = @p_name
                    -- and [KanaName] = @p_kananame
                    and [Birth] = @p_birth
                end else begin
                    if (@p_kananame is not null) and (@p_birth is not null) begin
                        select
                           [ExamineeId]
                          ,[ImportGroupId]
                          ,[ResidentNumber]
                          ,[ApoDate]
                          ,[TestDate]
                          ,[Name]        = LTRIM(RTRIM([Name]))
                          ,[KanaName]    = LTRIM(RTRIM([KanaName]))
                          ,[Gender]
                          ,[Birth]
                          ,[Age]
                          ,[RankId]
                          ,[RankName] -- ★
                          ,[TestTime] -- ★
                          ,[LastTestId]
                          ,[Status]
                          ,[DeleteFlag]
                          ,[CreateDate]
                          ,[CreateUser]
                          ,[UpdateDate]
                          ,[UpdateUser]
                        FROM [dbo].[MExaminee]
                        where
                        --    [Name] = @p_name
                            [KanaName] = @p_kananame
                        and [Birth] = @p_birth
                    end else begin
                        if (@p_name is not null) begin
                            select
                               [ExamineeId]
                              ,[ImportGroupId]
                              ,[ResidentNumber]
                              ,[ApoDate]
                              ,[TestDate]
                              ,[Name]        = LTRIM(RTRIM([Name]))
                              ,[KanaName]    = LTRIM(RTRIM([KanaName]))
                              ,[Gender]
                              ,[Birth]
                              ,[Age]
                              ,[RankId]
                              ,[RankName] -- ★
                              ,[TestTime] -- ★
                              ,[LastTestId]
                              ,[Status]
                              ,[DeleteFlag]
                              ,[CreateDate]
                              ,[CreateUser]
                              ,[UpdateDate]
                              ,[UpdateUser]
                            FROM [dbo].[MExaminee]
                            where
                                [Name] = @p_name
                            --    [KanaName] = @p_kananame
                            -- and [Birth] = @p_birth
                        end else begin
                            if (@p_kananame is not null) begin
                                select
                                   [ExamineeId]
                                  ,[ImportGroupId]
                                  ,[ResidentNumber]
                                  ,[ApoDate]
                                  ,[TestDate]
                                  ,[Name]        = LTRIM(RTRIM([Name]))
                                  ,[KanaName]    = LTRIM(RTRIM([KanaName]))
                                  ,[Gender]
                                  ,[Birth]
                                  ,[Age]
                                  ,[RankId]
                                  ,[RankName] -- ★
                                  ,[TestTime] -- ★
                                  ,[LastTestId]
                                  ,[Status]
                                  ,[DeleteFlag]
                                  ,[CreateDate]
                                  ,[CreateUser]
                                  ,[UpdateDate]
                                  ,[UpdateUser]
                                FROM [dbo].[MExaminee]
                                where
                                --    [Name] = @p_name
                                    [KanaName] = @p_kananame
                                -- and [Birth] = @p_birth
                            end else begin
                                if (@p_birth is not null) begin
                                    select
                                       [ExamineeId]
                                      ,[ImportGroupId]
                                      ,[ResidentNumber]
                                      ,[ApoDate]
                                      ,[TestDate]
                                      ,[Name]        = LTRIM(RTRIM([Name]))
                                      ,[KanaName]    = LTRIM(RTRIM([KanaName]))
                                      ,[Gender]
                                      ,[Birth]
                                      ,[Age]
                                      ,[RankId]
                                      ,[RankName] -- ★
                                      ,[TestTime] -- ★
                                      ,[LastTestId]
                                      ,[Status]
                                      ,[DeleteFlag]
                                      ,[CreateDate]
                                      ,[CreateUser]
                                      ,[UpdateDate]
                                      ,[UpdateUser]
                                    FROM [dbo].[MExaminee]
                                    where
                                    --    [Name] = @p_name
                                    --    [KanaName] = @p_kananame
                                        [Birth] = @p_birth
                                end
                            end
                        end
                    end
                end
            end
        end 
    end

    return (@return)
END

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 90.37%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

同じタグがついた質問を見る

  • Java

    16479questions

    Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

  • SQL Server

    756questions

    SQL Serverはマイクロソフトのリレーショナルデータベース管理システムです。データマイニングや多次元解析など、ビジネスインテリジェンスのための機能が備わっています。