Oracle

全3478件中121~140件表示
  • テーブルの行を動的なキーをもとに削除したい

    基本的な質問でしたら恐縮です。 Oracle 11gデータベースを使用しています。あるテーブルから、特定のキーを削除するSQL文は書けます。例えば、USER_IDが0020、0019の二行を削除したい場合以下のようにすると思います。 DELETE FROM USER_MASTER WHERE USER_ID IN ('0020', '0019'); 今やりたいのは、このキーを他のCSVファイルなどに記述させ、(例. 0020, 0019, 0037, ...)この値をバッチファイルから読み込んで削除するようにしたいです。そうすれば、日次でCSVを更新すれば毎日別の行を削除でき汎用的にできるからです。CSVに記述する値の数は可変としたいのですが、このように動的に処理することは可能でしょうか? 普通のSQLではなく何等かのプログラムが必要かと思いますが、これがPL/SQLというものでしょうか? もし、簡単にPL/SQLで作成できるようなものであれば、どなたかご提示頂けないでしょうか。あと、バッチファイル(WindowsでもUNIX版でも)からそれを呼び出すところまでご教示頂けるのなら大変助かります。 以上、宜しくお願いします。

  • カンマが入った文字列をIN演算子で利用する方法

    OracleのSQLに関する質問です。 テーブルAの項目「材料一覧」には以下の例のように、カンマ区切りでデータが入っています。 例)1行目…小麦粉,卵,牛乳,大豆   2行目…小麦粉,アミノ酸 また、同じくテーブルAの項目「材料」には一つの材料が入っています。 例)1行目…小麦粉   2行目…卵 このテーブルAの「材料」の値が「材料一覧」に存在しているデータを抽出したくて、 ↓のようなIN演算子を実行してみましたが、対象データが1件も出ませんでした。 SELECT * FROM テーブルA WHERE 材料 IN (材料一覧) 上記のSQLをもう少し加工して、対象データを抽出することは可能でしょうか? 可能であれば、その方法を教えて頂きたいです。

  • 外部結合でのcount結果でゼロを表示

    以下の様なテーブルがあります。 テーブルを結合してカウントを行っているのですが、 tbl1の商品コードに存在しないユーザが存在しない場合や tbl3のフラグが”0”または”1”が存在しない場合、 ゼロ件と出したいのですが出力されません。 どうすれば期待した結果になるか教えて下さい。 ■tbl1 ID SYOHIN_CODE ---- ----------- 1 A01 2 B01 3 C01 4 D01 5 E01 ■tbl2 ID NUM SYOHIN_ID ---- ------- --------- 1 NUM001 1 2 NUM002 2 3 NUM003 3 4 NUM004 4 5 NUM005 1 6 NUM006 1 7 NUM007 2 8 NUM008 3 9 NUM009 4 10 NUM010 1 ■tbl3 ID NUM_ID FLG ---- -------- ---- 1 1 1 2 2 1 3 3 1 4 4 0 5 5 0 6 6 0 7 7 0 8 8 1 9 9 0 10 10 0 ■実行した結果 SYOHIN_CODE FLG CNT ----------- ---- --------------- A01 0 3 A01 1 1 B01 0 1 B01 1 1 C01 1 2 D01 0 2 ■期待する結果 SYOHIN_CODE FLG CNT ----------- ---- --------------- A01 0 3 A01 1 1 B01 0 1 B01 1 1 C01 0 0 C01 1 2 D01 0 2 D01 1 0 E01 0 0 E01 1 0 実行したSQL select T1.syohin_code,T3.flg,count(T2.num) cnt from tbl1 T1 inner join tbl2 T2 on T1.id=T2.syohin_id inner join tbl3 T3 on T2.id=T3.num_id group by T1.syohin_code,T3.flg order by T1.syohin_code ;

  • 文字型で入っている時間を合計する方法について

    プログラミング初心者です。Oracleを使っています。 現在、文字型で入っている時間(TIME)を合計して出す方法を考えています。 書式はHH24:MIであり、例えば08:30という風にテーブルには入っています。 これらの列を合計し、合計が160時間ならば160:00と出したいのですが、方法が分かりません。 SUMで合計が出せるようにTO_NUMBERに入れようとしたのですが、変換することができませんでした。 非常に初歩的な質問だとは思いますが、質問できる人がいないので、分かる方がいれば是非お願いします。

  • データベースのインデックスについての基本的な質問

    とあるテーブルAとBがあり、二つはあるキーで結合するSQLを頻繁に発行しています。両テーブルとも数万件のデータがあり、パフォーマンスが遅いということだったので、結合の条件としているキーのカラムにインデックスを作成したところ、劇的に速くなりました。 というところまでは良かったのですが、最近、負荷テストを行う目的で、さらに数百万件のテストデータをいっきに両テーブルにINSERTしました。この場合、インデックスは何かしら人の手によるメンテナンスが必要なのでしょうか?(ALTER INDEX REBUILD ONLINEという再構築のSQLがあることを知りました) それとも、データがテーブルに追加されても既に以前インデックスが作成されている場合は特に人の手による保守は不要なものでしょうか? 今は負荷テスト中ですが、本稼働した後にも何か自動でデータベースのインデックスの保守作業は一般的に必要なものなのかどうか、必要な場合は具体的にどのようにやるのか教えて頂きたいです。 使用しているDBはOracle 11gです。

  • プロシージャの実行方法

    テキストファイル(test.txt)から文字列を一行ずつ読み込んでDBMS_OUTPUTで表示を最後の行まで繰り返すプロシージャを作りたいのですが、プロシージャ制作までは出来るのですがプロシージャの実行が出来ません。 原因が理解できないのですが返答をお願いします。 create or replace procedure TXT_R as FH UTL_FILE.FILE_TYPE; V_LINE VARCHAR2(32767); BEGIN FH := UTL_FILE.FOPEN('DATA_PUMP_DIR','test.txt','R'); LOOP UTL_FILE.GET_LINE(FH,V_LINE); DBMS_OUTPUT.PUT_LINE(V_LINE); END LOOP; EXCEPTION WHEN NO_DATA_FOUND THEN UTL_FILE.FCLOSE(FH); END TXT_R; ここまでプロシージャです。 そしてネットで調べた結果引数が無い時は書かなくていいと書かれていたのですが、 exec TXT_R; で実行すると ORA-00900: SQL文が無効です。 となってしまいます。

  • PL/SQLのプロシージャが動かない

    テキストファイル(test.txt)から文字列を一行ずつ読み込んでDBMS_OUTPUTで表示を最後の行まで繰り返すプロシージャを作りたいのですが、declareで実行する時は何の問題も出ないのにプロシージャを作ろうとするとエラーが発生します。 原因が理解できないのですが返答をお願いします。 create or replase procedure TXT_R as FH UTL_FILE.FILE_TYPE; V_LINE VARCHAR2(32767); BEGIN FH := UTL_FILE.FOPEN('DATA_PUMP_DIR','test.txt','R'); LOOP UTL_FILE.GET_LINE(FH,V_LINE); DBMS_OUTPUT.PUT_LINE(V_LINE); END LOOP; EXCEPTION WHEN NO_DATA_FOUND THEN UTL_FILE.FCLOSE(FH); END; 実行すると ORA-00905: キーワードがありません。 のエラ-が出ます

  • pl/sql ストアドからレコードセットを返す

    カーソルを使わずに結果セットを返す方法を知りたいです。 戻り値または、引数で返してもかまいません。 また、同様に動的SQLの結果を返す場合を教えてください。 ※結果セットは複数行の場合です。

    • ベストアンサー
    • ikty
    • Oracle
    • 回答数1
  • ORA-00917エラーが発生する

    SQL*Loaderを使用してCSVファイルをテーブルにロードしたいのですが、 「ORA-00917 カンマがありません」というエラーが発生してしまいます。 制御ファイルやデータファイルのどこに問題があるのでしょうか。 ご教授願います テーブル定義 テーブル名 TB_HOGE ID varchar XML_DATA XMLType INS_YMD DATE USER VARCHAR CTLファイル OPTIONS(  ERRORS = 0 ) LOAD DATA CHARACTERSET UTF8 INFILE '/temp/foo/data.csv' INTO TABLE TB_HOGE APPEND XMLType(XML_DATA) FIELDS TERMINATED BY "," OPTIONALLY ENCLOSED BY '"' TRAILING NULLCOLS (ID, XMLFILE FILLER CHAR, XML_DATA lobfile( XMLFILE ) terminated by EOF, INS_YMD "TO_DATA( :INS_YMD, 'YYYYMMDD')" USER) csvファイル data.csv ”No001","/temp/foo/xml/data1.xml","20150320","user1" ”No002","/temp/foo/xml/data2.xml","20150320","user1" よろしくお願いします。

  • データベースについて

    データベースについていくつか質問があります。 1.シングルクォートとタブルクォートの違い シングルクォートは、文字リテラルを使いたいときに使い ダブルクォートは、特殊文字や大文字小文字を区別したいときに使うと参考書に書いてあったのですが、ダブルクォートでも文字リテラルを使えたのですがなぜでしょうか!?特に、ダブルとシングルの使用に区別は要らないのでしょうか!? 2.SQLが操作できるフリーソフトでオススメを教えてください。用途は、SQL(オラクルのブロンズ)の勉強に使います。

    • ベストアンサー
    • mauluru
    • Oracle
    • 回答数2
  • SQLの書き方について

    すみません、SQL初心者なので変な質問かもしれませんが、、SQLの書き方がわからないので教えてください。以下のような二つのテーブルがあるとします。 (Table: EMP2014) EMPNO | EMPNAME | TEL 100 | TARO | 03-1111-2222 101 | HANAKO | 03-2222-3333 (Table: EMP2015) EMPNO | EMPNAME | TEL 200 | JIRO | 03-3333-4444 201 | KYOKO | 03-4444-5555 このテーブルからSQLを実行して、以下のような結果を得たいです。 EMPNO | EMPNAME | TEL 100 | TARO | 03-1111-2222 101 | HANAKO | 03-2222-3333 200 | JIRO | 03-3333-4444 201 | KYOKO | 03-4444-5555 JOINというのは二つのテーブルを左右に並べた形での結合だと思うんですけれど、僕がやりたいのは内容の似たテーブル(上記の場合全く同じカラム)を上下に単純にくっつけて一つの出力結果にしたいです。ビューなどをつくって仮想的に一つの表にできるものなのでしょうか? とても簡単なのかも知れませんが、、宜しくお願いします。

  • SQL PLUSについての質問です

    SQL PLUSの質問です。 データーベースはoracle11gを使用しています。 company_table code | company 001 | ジオニック社 002 | ツィマッド社 003 | アナハイム社 code:コード company:社名 day_table code | day 001 | 1993/3/5 002 | 1932/2/15 003 | 1986/5/23 code:コード day:設立日 どちらのテーブルもPrimary Keyはcodeです。 この2つのテーブルから、「現在月(今は2月)の会社と設立日、設立何年目か」を取り出したいです。 イメージとしては現在は2月ですので、上記の表で行けば、 ツィマッド社 | 1932/2/15 | 83 としたい所です。 select company,day, trunc(months_between(sysdate,day)/12+0.999) from company_table,day_table where company_table.code=day_table.code / これで一応値を取得する事は出来るのですが、全ての会社と設立日、2015年までの設立年数が取得されてしまいます。 現在の月だけ、という条件を付与して値を取り出す方法を教えて頂けないでしょうか。 よろしくお願い致します。

  • SQL文

    SQLの初心者です。 Aテーブル(a項目,b項目,c項目)とBテーブル(a項目,d項目,e項目)のテーブルがあります。 d項目順でAテーブルの項目のみ出力するにはどうしたらいいのでしょうか。 例えば次のSQL文ではd項目順で出力されますが結合の為、AテーブルとBテーブルの全項目が出力されます。 SELECT * FROM Aテーブル LEFT OUTER JOIN DITKM ON Aテーブル.a項目 = Bテーブル.a項目 ORDER BY Bテーブル.d項目 次のSQL文のようにAテーブルの項目を選択したらAテーブルの項目のみ出力する事はわかります。 SELECT a項目,b項目,c項目 FROM Aテーブル LEFT OUTER JOIN DITKM ON Aテーブル.a項目 = Bテーブル.a項目 ORDER BY Bテーブル.d項目 今回はAテーブルの項目数が少ないのでこれでもいいのですが、項目数が多くなると大変です。 上の様に項目を選択しないでAテーブルの項目を全て出力する事は可能なのでしょうか。 宜しくお願い致します。

    • ベストアンサー
    • GONBEBW
    • Oracle
    • 回答数1
  • OracleのTrigger(トリガー)について

    いつもご親切にありがとうございます。 Oracleのトリガーについて教えてください。 テーブルA ----------------- 日付 date型 品名 char(15) 営業所 cahr(5) フラグ char(1) データをINSERTする際に、下記のように変更したいです。 (1)日付が2月且つ、営業所が00001の場合は99999に変更、 (2)日付が2月且つ、品名の後ろ5桁が00001の場合後ろ5桁だけを99999に変更 下記のようにトリガーを作成しているんですけど、 (2)をどのように入れたらよいでしょうか? CREATE OR REPLACE TRIGGER TRG_テーブルA BEFORE INSERT ON テーブルA REFERENCING OLD AS OLD NEW AS NEW FOR EACH ROW BEGIN IF ( to_char(:NEW.日付,'YYYYMM') = '201502' ) AND ( :NEW.営業所 = '00001' ) THEN :NEW.営業所 := '99999'; END IF; END; / よろしくお願いします。

  • SQlを使用して指定レコードの削除を行いたい

    SQL構文を使用して、テーブル内の指定のデータを削除したいと思っています (oracle11gです) 条件抽出テーブル:PRM_A 抽出条件1の対象カラム:NO_1(6ケタで年月が入っている) 抽出条件2の対象カラム:NO_2(0か1が入っている) 抽出内容:NO_1の年月のうち、最小の値かつ、NO_2の値が0である →抽出結果として、6けたの年月が出力される 削除対象テーブル:DEL_TBL_A 削除条件用カラム1:DEL_COL_1 削除条件用カラム2:DEL_COL_2 削除条件:DEL_COL_1が「抽出結果」の1~4桁目(4桁の数値)と一致し、 DEL_COL_2が「抽出結果」の5~6桁目(2桁の数値)と一致する 以上の処理を行おうとして、まずは前半部分(抽出結果の抜き出しまで)を行いました。 select min(NO_1) from PRM_A where NO_2=0 上記で、想定できる結果の出力ができました。 その次に、削除条件を作成しようとしたのですが、下記の記載で実施したところ、 Error [row:3,col:130] ORA-00936: 式がありません。 と出力されました。 select substr((select min(NO_1) from PRM_A ),1,4) from PRM_A where NO_2=0 and (select min(NO_1) from PRM_A) ; 申し訳ございませんが、理由と正しいSQL文がお分かりになられる方がおりましたら、ご教授願えませんでしょうか

  • Oracle databaseのインストール

    Oracle database 12cをインストールしたところ、 EclipseのDBViewerから接続できない状況になっています。 Eclipseからプラグインを指定すると 「指定されたClasspathにはDriverクラスが存在しません。」 というエラーメッセージが表示されます。 そこで環境変数を確認した所、CLASSPATHにデータベースに関連 するクラスが見当たらないように思えます。 (Path変数にはデータベースの格納先が追加されているが、 CLASSPATH変数には"D\Program Files\Java"とだけ表示。) データベースのインストールはWebサイトを参考に行ったのですが、 特にエラーで止まったりする事はありませんでした。 参考にしたサイトには、手動で環境変数を変更するような記述は 無かったように記憶していますが、何が足りないのでしょうか。

  • 以下のようなSQLについて教えてください。

    売上トランと商品マスタがあるとします。 商品マスタは廃止フラグをVARCHAR2(1)で保持していて、 1なら廃止、0なら今販売中で、 商品マスタは全件で100万件あり、そのうち95万件は既に廃止になっているとします。 このとき、 SELECT 売上トラン.* , 商品マスタ.商品名称 FROM 売上トラン INNER JOIN 商品マスタ ON 売上トラン.商品コード = 商品マスタ.商品名称 WHERE 商品マスタ.削除フラグ = '0' と書くのと、 SELECT 売上トラン.* , 商品マスタ.商品名称 FROM 売上トラン INNER JOIN (SELECT * FROM 商品マスタ WHERE 商品マスタ.削除フラグ = '0') 商品マスタ ON 売上トラン.商品コード = 商品マスタ.商品名称 と書くのだと、検索は下の方が速くなったりしますか? イメージですが、 上だと全件同士でくっつけた後で削るのに対して、 下だと削って5万件だけになったものをっつけていて、下の書き方の方が良いのかな? と思ったものの、どこかの本などでこういう書き方が良いと読んだわけではないので、 イメージであっているのか、それとも変わらないのか質問しました。 また、削除フラグのように1か0の2値しかとらない項目については、 INDEXを張る効果はあるでしょうか? ちなみにverで挙動が変わるかわかりませんが、環境はoracle11gを想定した場合となります。

  • インデックスの階層数によるパフォーマンスの差

    Bツリーのインデックスで、階層数が増えるとパフォーマンスが悪化するとありますが、なぜでしょうか。 データ量が膨大な場合は、むしろパフォーマンスが上がるような気がしてならないのですが・・・ 例えば階層が3から4に増えた場合、検索時に単にIOが1回増えるだけのように思えますが、その1回のコストを問題にしているということなのでしょうか? 基本的な質問ですみませんが、よろしくお願いします。 (削除リーフ数はゼロという前提で)

  • スナップショット取得について教えてください

    ある、スクリプト内にスナップショット取得するコマンドを加えたいです。 引数を7つ指定します。 書き方を教えてください。 スペース、記号等に注意して色々試しましたが上手くいきません。。 指定したい引数は以下です。 i_snap_level= i_execution_th= i_disk_reads_th= i_parce_calls_th= i_buffer_gets_th= i_sharable_mem_th= i_version_count_th= どうぞ、宜しくお願いします。

  • PLSQL

    セットコード、商品コード、金額を持つテーブルがあります。 セット商品コード(X)は商品コード(M,N)を持っています。商品コードNはセット商品コードとしても登録されており、商品コード(O,P)を持っています。Pはセット商品コードとしても登録されており、子に商品コードXを持ちます。ただXはセット商品コードとして登録されているので、子に商品コードして登場するのは問題があります。 このようなチェック末端まで行う処理を作りたいのですがどのような方法がありますでしょうか?