• 締切済み

ユーザー情報、ステータス情報の条件によって取得するデータを制限したい

・データベース Oracle10g ・プログラム java 1.6 お世話になっております。業務でOracleを利用して以下のデータをしたいと考えています。 ★やりたいこと ・検索画面から、状態を指定し、次画面の検索結果画面で結果を表示したい。 ・検索条件は、状態のみ(本当はいろいろあるけどここでは割愛) ・ログイン時のユーザー情報を保持しており、画面で指定された'状態’と'ユーザー'をキーにデータを取得する ・係長、一般職、派遣のユーザーは "状態"が"本社承認済み"以降のデータしか見られない ・ただし、自分が登録・申請・承認に関わるデータは"本社承認済み"以前の状態のものも見られる ・上記の結果を一回のSQLで取得したい ■テーブル:予定情報 --------------------------------------------- 登録内容 | 登録者 | 申請者 | 承認者 | 状態・・・・ --------------------------------------------- AAAAAAAA |派遣  | 課長  | 部長  | 登録済み BBBBBBBB |一般職 | 係長 | 申請済み CCCCCCCC |派遣  | 一般職 | 課長  | 本社承認済み DDDDDDDD |課長  | 課長  | 部長  | 連携済み EEEEEEEE |派遣  | 派遣  | 係長  | 反映済み ※ユーザーが一般職の場合、登録内容AAAAAAAA以外のデータを取得する 派遣の場合は、登録内容BBBBBBBB以外のデータを取得する 係長の場合は、登録内容AAAAAAAA以外のデータを取得する ■ユーザー(登録者、申請者、承認者のデータ) 以下のユーザーが存在しています。 ・社長 ・部長 ・課長 ・係長 ・一般職 ・派遣 ■画面から指定可能な状態は以下の通り ・すべて ・登録済み ・申請済み ・本社承認済み ・連携済み ・反映済み ★わからないこと 検索画面で状態'すべて'が選択された場合に、 係長、一般職、派遣のユーザーについて状態"が"本社承認済み"以降のデータはすべて表示し、 自分が登録・申請・承認に関わるデータは"本社承認済み"以前の状態のものを取得するというSQL の条件指定をおこない際の構文がわからない。 状態が'登録済み'かつ、ユーザーが'派遣'の場合のSQLは以下ですが、 状態で'すべて'が選択された場合は、どのような構文になるのでしょうか? Selct * from 予定情報 where 状態 ='登録済み' and 登録者 = '派遣' and 申請者 = '派遣' and 承認者 ='派遣' なにとぞよろしくお願いいたします。

  • Oracle
  • 回答数1
  • ありがとう数4

みんなの回答

  • 3rd_001
  • ベストアンサー率66% (115/174)
回答No.1

こういった場合、以下のようなマスタ類を整備します。 ■状態マスタ 状態コード、状態 ・10:登録済み ・20:申請済み ・30:本社承認済み ・40:連携済み ・50:反映済み "本社承認済み"以前は、「where 状態コード > 30」で表現可能です。 ※というか、以前以後を表現するためには「本社承認済み」という文字列では表現できません。 また、ユーザに対しては参照可能な「状態コード」を付与します。 こうすることで、ユーザが参照可能な状態を定義します。 ■ユーザマスタ ユーザID、参照可能状態コード、ユーザ名 ・01 10 社長 ・02 10 部長 ・03 10 課長 ・04 40 係長 ・05 40 一般職 ・06 40 派遣 こうしておけば以下条件で各ユーザが参照可能な状態を指定できます。 ユーザ毎に個別指定も可能です。 「where 状態コード >= 参照可能状態コード」 一般職は40からしか見られなくなりますし、課長は10から見られます。 ■状態マスタ ・99 すべて ・10 登録済み ・20 申請済み ・30 本社承認済み ・40 連携済み ・50 反映済み (1) 検索条件取得 「一般職」が状態「登録済み」を指定。 ・ユーザID(05)と参照可能状態コード(40)を取得 ・指定された状態(10)を取得 (2)SQLの組み立て  (1)で取得した条件を以下に当てはめていきます。  カッコで条件の優先順位を定義します。 条件は(a)、(b)、(c)に分けます。 (a) 自己データの検索部分 (b)ユーザ権限による検索部分 (c)指定された状態を権限に付与する。 優先順位は以下にします。 ただし、(c)の条件は99の場合は指定しません。 ( (a) or (b) ) and (c) 以下のようなSQLとなります。 --(a) 自己データの検索部分 -- 登録者、申請者 、承認者が自分 の場合は、状態を検索条件にしない。 where ( ( (登録者コード = 05 or 申請者コード = 05 or 承認者コード = 05 ) ) -- (b)ユーザ権限による検索部分 -- 参照可能な状態を指定する。 or ( where 状態コード >= 40) ) -- (c)指定された状態を権限に付与する。 -- ※99の場合は条件指定を省略 and 状態コード = 10 -- これくらいのテーブル構成でないと、実現はできないと思います。 じゃないと、java内部で条件指定を直書きすることになります。 あと、これだと(and条件)、登録も申請も承認も「派遣」の人が全部やったデータしかみられませんよ? >Select * from 予定情報 where 状態 ='登録済み' >and 登録者 = '派遣' and 申請者 = '派遣' and 承認者 ='派遣'

関連するQ&A

  • このようなデータと取得手段は個人情報に触れる?

    《 登場人物 》 A:弊社 B:ユーザ(システム購入会社) C:購入者(ユーザと取引をしてる末端顧客) 《 全体の流れ 》 弊社(A)で開発したソフトウェアを販売しようと考えております。 このソフトは業務支援システムで、販売先ユーザ(B)の日々の業務を支援するソフトウェアです。 ※現在のところ、無償ではなく有償販売を計画しております。 このシステムの中の1機能に、帳票を作成する機能があります。 ユーザは帳票作成の為に、内容を入力または選択し、データを登録する作業を行います。 この作業を完了させ、ユーザはユーザの取引顧客であるエンドユーザー(C)へ出力後提出します。 《 データ送信プログラムの内容 》 帳票が完成した段階で、 この入力または選択したデータの中から、抜粋されたデータ(あらかじめデータの種類を指定) をバックグラウンド作業(ユーザは画面上に変化が起こらないので分からない) にて処理し、メーラーを使用して暗号化した後、弊社にデータを送信させます。 《 作成する帳票(分かりやすくする為に、見積書形式に致しました) 》 システムに登録されている顧客である 見本太郎さん 東京都港区六本木X-X-X 03-XXXX-XXXX に対して、ご要望の 自宅の仕事環境整備 の為に、下記のような見積を作成した。 (1)S●ny V●io XXXX 123456円(税込)で2台 ★仕入価格:74321(税込) ※既存のルーターを使うので、新規ルーターは不要。 (2)EPS●N 複合機プリンター XX 12345円(税込)で1台 ★仕入価格:7432(税込) ※プリンターをつなぐケーブルが付属されていないので、サービスで付属。 (3)運搬費及び取付費用 を、750円(税込)で1式 ★仕入価格:0(税込) ※1名でお伺いをして、据付まで行います。 補足欄 ※キャンペーン価格の特価です。 ※OS以外のソフトは含まれておりません。 《 指定する取得データ 》 (1)自宅の仕事環境整備 (2)S●ny V●io XXXX,123456,2,74321,既存のルーターを使うので、新規ルーターは不要。 (3)EPS●N 複合機プリンター XX,12345,1,7432,プリンターをつなぐケーブルが付属されていないので、サービスで付属。 (4)運搬費及び取付費用,750,1,0,1名でお伺いをして、据付まで行います。 (5)キャンペーン価格の特価です,OS以外のソフトは含まれておりません。 《 補足事項 》 ※ソフトウェアの使用許諾同意書及び契約書にはこの送信機能の説明(条項)を入れることに致します。 ※この抜粋するデータには、 生存する個人に関する情報は含まれておらず、当該情報に含まれる氏名等により特定の個人を識別することができる情報は取得いたしません。 ※『特定できる個人の情報』ではありませんので、いずれの時点においても5000人など『人の数』では無く『案件の数』との解釈です。 ※おそらく、ユーザ側ではセキュリティーソフトの関係上、最初にこのプログラムが作動する時に、  セキュリティーソフトの警告が表示されるはずです。全く警告が無い訳ではない。 ※取得したデータは弊社のマーケティングデータとして活用します。 ※取得したデータを加工し、有益情報として、無償か有償のどちらかでユーザ(B)に還元します。 ※取得し加工したデータは、金銭を伴い第三者へ譲渡する場合が想定されます。 《 重要な論点 》 ★上記の取得情報(の内容)及び取得手段(プロセス)は、  個人情報保護法ならびに個人情報の保護に関する法律に  規定される個人情報に対して問題か否か? 《 質問の内容 》 (1) このような条件で、この送信プログラムをソフトウェアに付帯した場合、    何らかの犯罪に当たり、罪に問われるものでしょうか? (2) このようなデータを弊社がユーザを介して取得する場合に、    ユーザはエンドユーザに『利用目的の明示と本人の了解』を行う義務がありますでしょうか?    また、行う場合にはどのようなプロセスを弊社がユーザにお願いすることが適当でしょうか? (3) このような情報を取得し加工したデータを第三者へ譲渡する場合があるとするならば、この取得情報(の内容)は、    『安全性の確保(流出や盗難、紛失を防止する)』に触れますでしょうか? (4) 使用許諾書や契約書に、送信プログラムの説明を記載する場合、どのような文言が適当でしょうか? 的確なご指導を頂戴できますよう、何卒よろしくお願いいたします。

  • Active Directoryのユーザー情報編集について

    現在Windows2000SeverでActive Directoryを使用しています。 そのActive Directoryの【Active Directoryユーザーとコンピューター】画面。 その画面の中に表示されているユーザーとグループの一覧で、現状名前に統一せいがなく登録されています。 ある方はフルネームで、ある方は姓だけ、ある方は姓は漢字で苗字はアルファベットといった状態です。 ですのでこれら登録者の名前をフルネームで統一したいのですが、変更するには【Active Directoryユーザーとコンピューター】画面で一人一人修正していくしかないのでしょうか?? 登録者が1000人近くいる現状でそのような方法だと大変な時間がかかってしまいます。 この一覧の情報をエクスポートしてEXCELで編集しインポートといった事は可能でしょうか?? もし無理であれば、他に良い作業手段はないものでしょうか??

  • ユーザープロファイル取得エラーが表示されます

    以前の回答を見ましたが,なかなか理解できないので教えてください。 OSはウインドウズXP,ホームです。 「管理者」では問題ないようですが,「制限ユーザー」で次のメッセージが出てきます。 「ユーザープロファイル取得エラー」「ユーザープロファイルパスをシステムから取得することが出来ませんでした。[Application Data]フォルダやMyDocuments]フォルダなどのユーザープロファイルパスが,システムから正しく取得できるか確認してください。 システムから意図しないパスが取得されたり,取得できない場合はユーザープロファイルデータが壊れている可能性があります。」以上です。 ×ボタンで消すと何回かメッセージが出ます。その後操作はできるのですが,立ち上げの状態から出ますし,ファイル保存時にも出てくるので不安を感じます。 制限ユーザーではいろんな人(職場で使用)が使います。 冒頭にも書きましたが,PCの動作などについては全くの無知です。何とか自分で対策を取れるように教えていただくとありがたいです。よろしくお願いします。

  • コマンドの記述に間違いがありますか?

    Windows7上でSkype 5.5.0.114を使っています。 1. コンピュータ起動と同時にSkypeがスプラッシュなしに起動し、 2. 自動ログインし、 3. タスクトレイにのみ表示される という状態にしたいので、 a. Skype.exeのショートカットを作成し、 b. そのショートカットの「プロパティ」→「リンク先」の欄に以下を記述し、 "C:\Program Files (x86)\Skype\Phone\Skype.exe" /nosplash /username:AAAAAAAA /password:BBBBBBBB /minimized (AAAAAAAAはSkype ID、BBBBBBBBはパスワードです) c. このショートカットを「スタートアップ」フォルダの中に入れました。 これでマシンを再起動すると、Skypeのアイコンはタスクトレイに入るのですが、ログインしていない状態です。ここから手動でログインすると、ログイン画面でSkype IDは入力されていますがパスワードが空欄のままです。 上記b.の中のBBBBBBBBに間違いはないのですが。 どこに間違いがあるのかわかりません。精通しておられる方、お知恵をお貸しください。お願いします。

    • ベストアンサー
    • Skype
  • ユーザーフォームの使い方、データ取得で困ってます。

    '作業用シート Private Sub CommandButton1_Click() Dim shinaName As String Dim shinaNo As String Dim sName As String Dim cName As String shinaName = InputBox("商品名を入力") shinaNo = InputBox("商品Noを入力") shinaDiv = InputBox("分類") sName = shinaName cName = shinaNo dName = shinaDiv 'ひな形シートをコピーし、シート名を商品名に Sheets("sheetnew").Select Sheets("sheetnew").Copy Before:=Sheets(1) Sheets("sheetnew (2)").Name = sName '各セルに商品名と商品コードを Worksheets(sName).Activate With ActiveSheet .Range("A2") = sName .Range("A3") = cName .Range("A4") = dName End With End Sub 構文が正しいのかわかりませんが、ビギナーなりに作ってみました(^^;; 作業用シートのボタンをクリックし、入力情報をもとに シートを新規追加していくのですが、この作業をInputBoxではなく、 ユーザーフォームを呼び出して、入力作業を1回で終わらせたいのです。 ユーザーフォーム1()内に下記5項目を作りました テキストボックス1() '商品名 テキストボックス2() '商品No リストボックス1() '分類1~3 登録ボタン() キャンセル() コマンドボタン1をクリックし、ユーザーフォーム呼び出しはOKです。 フォーム内のキャンセルボタンも機能します。 登録ボタンをクリックすると、どうもテキスト、リストボックス内容が 読み込めないみたいでエラーします。 sName = shinaName cName = shinaNo dName = shinaDiv このインプットボックスのように、変数にすると構文的(宣言の仕方?)に 駄目なのでしょうか? ユーザーフォームを見真似で作ってみたのですが、 どこに、どうセットして、どう呼び出して? また、入力されたデータをどう取得して、構文に組み込むのか? 、、、なんかこの辺りがゴチャゴチャしてわかりません。 追って説明して頂けると助かります、構文の作り方教えてください。

  • プログラムからODBCデータソースの一覧を取得したい

    C++からODBCのシステムDSNやユーザーDSNに登録されているデータソースの一覧を取得したいのですが、Google検索などで調べてみましたがよく分かりませんでした。 そのためのWindows APIがあるのか? それともレジストリに書かれているのか? ヒントをお持ちの方はぜひお願いします。

  • アメリカ渡航時に申請するESTA

    3週間後にアメリカに渡航します。 ESTA導入後、初の渡航のため、はっきりとしないことがあります。実際に渡航するときに、ESTAの確認はどのようにされるのでしょうか? ESTAに申請して、承認を受けました。承認画面の印刷もしました。 あとは、申請時に登録したパスポートを持って渡航したらよいだけなのでしょうか。 申請があっさりと終わってしまったので、非常に心配になっています。 ESTAを取得して渡航した経験のある方のコメントをよろしくお願いします。

  • 外部スキーマ定義書とは?

    外部スキーマは、 データベースの構造(スキーマ)のうち、 ユーザー側やアプリケーション側から見た構造のことであると認識しています。 では、 以下の内容は、外部スキーマには該当しないということで良いのでしょうか? (クライアント&サーバの構成で例を記載します) 1.非表示の項目 2.クライアント側での画面モード(登録モード、更新モード)や、 データのステータス(申請中データ、承認済みデータ、差し戻しデータ)などの制御情報  (※これらはサーバサイドで必要なデータであるケース) 3.クライアントから、  サーバにリクエストするときに使う、  データクラス  (画面に出る項目はもちろん外部スキーマの範囲だと思いますが、   例えば画面に出てこない   「登録操作を行った日時」や、   画面では非表示にしている、   「申請ルート情報」など) **************** 外部スキーマ定義書は、 以下のどちらの目的であることが一般的なのでしょうか? 【A】 画面定義書として使うプロジェクト 【B】 「サーバサイドの開発担当者」と 「クライアントサイドの開発担当者」の 「インタフェースで使うデータクラスの定義」として、 クライアントから渡して貰いたいデータが何なのかの定義として、 「疎通」で齟齬を起こさないために使うプロジェクト 一般的にはどっちなのか、わかりかねています。 宜しくお願い致します。

    • ベストアンサー
    • Java
  • データベースのデータの持たせ方・取得方法について

    Mysqlを使ってwebアプリ開発を行っています。 ユーザ情報として趣味を最大5件(3件は必須)で入力できるようにしたいのですが、 その場合のデータの持たせ方を以下のように考えていますが問題ないでしょうか。 もっとよい方法などがあればご教示をお願いします。(下記は一部だけ抜粋したテーブル定義です) ■テーブルA(ユーザデータ) ・ユーザID ・ユーザ名 ・趣味ID1 ・趣味ID2 ・趣味ID3 ・趣味ID4 ・趣味ID5 ■テーブルB(趣味マスタ) ・趣味ID・・・テーブルAの趣味ID1~5と紐づく ・趣味名 ■補足事項 ・ユーザは5つの入力ボックスに自由に入力できる。 ・値が入力されて登録ボタンが押された際に、入力値でテーブルBを検索し検索がヒットすれば そのIDをテーブルAに登録。検索がヒットしなければテーブルBにその値を新規登録し、テーブルAにもそのIDを登録。 またこのようなデータ構造にした場合、 データ(ユーザ名、趣味1~5の趣味名)を一覧表示する場合どのようなSELECT文でデータを取得すればよいでしょうか?テーブルAとテーブルBをJOINで結合すればよいと思いますが、結合させたいカラムが複数ある場合にどのようなクエリにすればよいのかがいまいちわかりません。 よろしくお願いします。

    • ベストアンサー
    • MySQL
  • Googleのサービスステータスの取得方法について

    とある事情があって一週間以内に、下記の機能を持ったWEBアプリをJAVAで作成したいのですが、 どのように作成したらいいかアドバイスをいただけないでしょうか。 【作成したいWEBアプリ】 Google Apps サービスのステータスを取得して、Gmail本文欄に追記するWebアプリケーション ※WebアプリはTomcat6.0で動作 以下シーケンスで動作 (1)ユーザがGmailのメール作成画面を開く。 (2)WEBアプリをブックマークから開く。(Gmailと別ウィンドウ) (3)WEBアプリのボタンをクリック。 (4)WEBアプリは、自動的にGoogleサービスステータスを取得。 ※Googleステータスの取得方法は「Apps ステータスダッシュボード」を参考にする (5)WEBアプリは、取得したGoogleサービスステータスを、自動的に(1)のGmailの本文欄に追記。 【質問内容】 ・Googleサービスステータスの取得方法 ・Gmailの本文欄に任意のデータを追記する方法。 【現在の私のスキル】 JAVAサーブレット/JSPでDBを利用した簡単なCRUDシステムを何とか作れるぐらいレベルです。 恐らくGoogleサービスステータスを取得する部品とGmailの本文欄にデータを追記する部品をつくって それらを統合してWEBアプリを作成する形になると思いますが、その部品のところが、 どのように作成していいか分からず困っています。 お手数ですがご回答(アドバイス)をお待ちしております。

    • ベストアンサー
    • Java