• ベストアンサー

PL/SQLについての質問です

yujiの回答

  • yuji
  • ベストアンサー率37% (64/169)
回答No.3

Oralceはバージョンによって使用できるSQL文が 微妙に違います。 質問する際に、少なくとも  Oracleのバージョン  OS 程度は明らかにしてください。

saruno
質問者

補足

バージョンはオラクル8i 8.1.6です。 OSはwin2000です。

関連するQ&A

  • PL/SQLについて

    以下のVIEWをPROCEDURE内で使用しています。 CREATE OR REPLACE VIEW VW_KAIIN (CODE,NAME,TEL,STARTYMD) AS SELECT * FROM KAIIN WHERE STARTYMD <= TO_CHAR(SYSDATE,'YYYYMMDD') ※STARTYMDには有効な開始日付が入ります。 条件部分でSYSDATEではまずいことになり、 特定の日付を指定しなければならなくなりました。 VIEW自体にパラメータ渡しはできないということで、 CREATE OR REPLACE PROCEDURE TABLE_B_UPDATE (I_YYYY IN TABLE_A.YYYYY%TYPE, I_MM IN TABLE_A.MM%TYPE, I_DD IN TABLE_A.DD%TYPE,) PROCEDURE内でI_YYYY、I_MM、I_DDを条件に変更した VIEWを動的に作成して、処理をしたいのですが、 こういった事は可能でしょうか? そのまま書いてみましたが、CREATE部分でエラーが出てしまい、コンパイルできませんでした。 もし不可能である場合は、代替案をご教授いただけるとありがたいです。 どうかよろしくお願いします。

  • ビュー(view)のSQL

    SQL初心者で困っております。 どのようなSQLを作成すれば良いか ご助言頂ける方がいらっしゃいましたら よろしくお願いいたします。 テーブルにイメージは以下通りです。 項目1,日付,月,項目2,項目3 1234 ,6/2 ,6 ,A ,1 1234 ,6/4 ,6 ,A ,2 1234 ,6/5 ,6 ,A ,3 1234 ,6/6 ,6 ,B ,1 1234 ,6/6 ,6 ,B ,2 1234 ,6/6 ,6 ,B ,3 1234 ,7/2 ,7 ,A ,1 1234 ,7/4 ,7 ,A ,2 主キーは、項目1,日付です。 ビューで項目1,月をグループ化して、 項目2の昇順のトップ その中で項目3の昇順のトップ のレコードを抽出したいと思います。 結果が以下のようなイメージです。 1234,6,A,1 1234,7,A,1

  • SQLの書き方について

    (1)の様なテーブルから結果を(2)の様にしたいのですが どのようなSQLを書いたら表示できるのかわかりません。 アドバイスなどをお願い致します。 (新たにView等を作成するなどでもかまいません。) (1)dept_id / item_id / day / time (カラム) 1111 / 0001 / 20090101 / 60 (レコード1) 1111 / 0001 / 20090102 / 30 (レコード2) 1111 / 0002 / 20090101 / 40 (レコード3) 1112 / 0001 / 20090101 / 30 (レコード4) (2)dept_id / item_id / time1 / time2 1111 / 0001 / 60 / 30 1111 / 0002 / 40 / 1112 / 0001 / 30 /

  • SQLで、指定日条件のSQL文

    MySQLを使っています。 商品テーブルの中で、 同じ商品のレコードが複数あります。 その多数のレコード中に、日付項目があります。 そこから、 1)商品IDで重複せずに、2)指定日に、3)一番近い過去の日、4)指定日を含めて、複数ある未来の全レコード、を抽出するには、 どのようなSQL文を書けばよいでしょうか? 商品でユニークになるように、 1.過去に複数ある日付の中から、指定日に、一番近いレコード。 2.未来に複数ある日付の中の、全ての未来の、レコード。 3.同一商品レコードは、複数抽出されない。

  • SQLで、過去で一番大きい日付のレコード抽出

    MySQLを使っています。 同じ商品のレコードが複数あります。 その多数のレコード中に、日付項目があります。そこから、 1)指定日に、2)一番近い過去の日の1件の、3)全商品のレコード、を抽出するには、 どのようなSQL文を書けばよいでしょうか? 1.過去に複数ある日付の中から、指定日に、一番近いレコード。 レコードの例) 指定日=2015-07-01 商品ID 日付 1 2015-10-11 ・・・未来 ⇒ 抽出せず 1 2015-08-02 ・・・未来 ⇒ 抽出せず 1 2015-07-01 ・・・指定日 ⇒ 抽出せず 1 2015-07-01 ・・・指定日 ⇒ 抽出せず 1 2014-01-01 ・・・過去 ⇒ 抽出せず 1 2015-06-03 ・・・過去 ⇒ 抽出したい★★ 2 2015-10-11 ・・・未来 ⇒ 抽出せず 2 2015-08-02 ・・・未来 ⇒ 抽出せず 2 2015-07-01 ・・・指定日 ⇒ 抽出せず 2 2014-01-01 ・・・過去 ⇒ 抽出せず 2 2015-06-03 ・・・過去 ⇒ 抽出したい ★★

    • ベストアンサー
    • MySQL
  • PL/SQL内の検索条件について

    現在PL/SQL内にてSELECTを発行しています。 環境はoracle 11g、WinServer2008です。 SQLは下記になります。 SELECT * FROM TABLE_VIEW TV1 WHERE DAY_F <= kijun_dt AND DAYT >= kijun_dt ; kijun_dtは変数で渡しています。 質問は、kijun_dtを変数で渡すと処理が5秒くらいかかってしまうのですが '2012/03/01'のように固定すると一瞬で返ってきます。 型は日付型できちんとわたっており、 他のテーブル(view)でも同じように変数で渡している箇所が あるのですが、結果は一瞬え返ってきます。 統計情報の更新、マテリアライズド・ビューを作成し使用などしてみましたが どうしても遅くなる原因が特定できません。 似たような現象になった、または何か情報をお持ちの方、 ご回答を宜しくお願い致します。 足りない情報等御座いましたら書ける範囲で出しますので よろしくおねがいします。

  • PL/SQLの初歩的な質問その2

    失礼します。 先日は似たような質問でお世話になりました。 またPL/SQLについての質問です。 あるTBLに、以下のような感じでレコードが入っていたとします。 TESTtable test1(PK)(NUMVER型) test2(NUMVER型) --------------------------------------- 1 10 2 11 3 12 4 10 ここで以下のSELECT文を実行 SELECT test1 , test2 FROM TESTtable WHERE test2 = IN(10,12) この時、test2が10だったら20の数値に変換後test2として抽出し、 test2が12だったら22の数値に変換後test2として抽出する為には どのようなSELECT文になるでしょうか? 宜しくお願いします。

  • 一つのSQLにできませんか??

    表領域のサイズと使用量を抽出するSQLを作成しています。 上は自動拡張サイズと現サイズを抽出するSQL、下は現在の使用量を抽出するSQLです。この二つを一つのSQLで作成ってできないでしょうか?? (1)自動拡張と現サイズを算出 select sysdate syoribi, a.tablespace_name, to_char(sum(a.MAXBYTES)/1024/1024, '999,999,990') jidou, to_char(sum(a.BYTES)/1024/1024, '9,999,990.9') gensaize from dba_data_files a group by a.tablespace_name (2)使用量を算出 select sysdate syoribi, b.tablespace_name, to_char(sum(b.BYTES)/1024/1024, '9,999,990.9') siyoryo from dba_segments b group by b.tablespace_name どうかよろしくお願いします。

  • PL/SQLでエラー

    PL/SQLの使用方法を検討しており、下記のようにサンプルを作成しました。 //1. 宣言部 create or replace package Pac is procedure Pro1(p1 in varchar2); end; / パッケージが作成されました //2. 本体 create or replace package body Pac is procedure Pro1(p1 in varchar2) is tempdate DATE; begin select to_char(sysdate, 'yyyy/mm/dd') INTO tempdate from dual; DBMS_OUTPUT.PUT_LINE('引数は' || p1 || 'です。'); DBMS_OUTPUT.PUT_LINE('日付は' || tempdate || 'です。'); end; end; / パッケージ本体が作成されました //3. 実行 execute Pac.Pro1('a'); // エラー内容 行1でエラーが発生しました。: ORA-00900: invalid SQL statement SQLPlusより、上記の[1. 宣言部]でパッケージを作成し、[2. 本体]で本体部分を作成しました。 その後、[3. 実行]を実施しましたが、 エラーが出力されて実行されません。 何がいけないのかお気づきの点がございましたら、 よろしくお願いします。

  • SQLで、指定日に日付条件で抽出方法

    商品テーブルの中で、 同じ商品のレコードが複数あります。 その多数のレコード中に、日付項目があります。 そこから、 1)指定日に、2)一番近い過去の日の1件、3)指定日を含めて、複数ある指定日及び未来の全レコード、を抽出するには、 どのようなSQL文を書けばよいでしょうか? 1.過去に複数ある日付の中から、指定日に、一番近いレコード。 2.指定日と未来に複数ある日付の中の、全ての未来の、レコード。 レコードの例) 指定日=2015-07-01 商品ID 日付 1  2015-10-11 ・・・未来 ⇒ 抽出したい 1  2015-08-02 ・・・未来 ⇒ 抽出したい 1  2015-07-01 ・・・指定日 ⇒ 抽出したい 1  2015-07-01 ・・・指定日 ⇒ 抽出したい 1  2014-01-01 ・・・過去 ⇒ 抽出しない★ 1  2015-06-03 ・・・過去 ⇒ 抽出したい 2  2015-10-11 ・・・未来 ⇒ 抽出したい 2  2015-08-02 ・・・未来 ⇒ 抽出したい 2  2015-07-01 ・・・指定日 ⇒ 抽出したい 2  2015-07-01 ・・・指定日 ⇒ 抽出したい 2  2014-01-01 ・・・過去 ⇒ 抽出しない★ 2  2015-06-03 ・・・過去 ⇒ 抽出したい

    • ベストアンサー
    • MySQL