ベストアンサー OPEN文 2003/05/06 20:29 PL/SQLで質問なんですが OPEN カーソル名 FOR SELECT文 と OPEN カーソル名 の違いがよくわからないので、教えてください みんなの回答 (1) 専門家の回答 質問者が選んだベストアンサー ベストアンサー ARC ベストアンサー率46% (643/1383) 2003/05/06 21:31 回答No.1 OPEN カーソル名 FOR SELECT文 の方は、Where句などを後付けで指定できます。 宣言セクションで CURSOR HOGE IS SELECT * FROM T_HOGE; などとした後で、実行部で OPEN HOGE FOR SELECT * FROM T_HOGE WHERE CODE = '01'; ってな感じで記述できます。 OPEN カーソル名 ですと、宣言部で記述したとおりのカーソルが開かれます。 広告を見て全文表示する ログインすると、全ての回答が全文表示されます。 通報する ありがとう 0 カテゴリ [技術者向] コンピューターデータベースその他(データベース) 関連するQ&A 【PL/SQL】SQL文が長すぎてSELECTできない oracle9iのpl/sqlでSELECT文を発行し 取得したカーソルを返す処理をしています。 where句が動的になる為 実行するSQL文が長くなり ORA-06502: PL/SQL: 数値または値のエラー: 文字列バッファが小さすぎます。が発生しました のエラーが発生します。 そこで、SQL文の部分をCLOB型にしたり SQL文を「||」でつなげたり してみましたが、どちらもエラーになりました。 長すぎるSQL文を実行するには どうしたらよいでしょうか? 以下ソースです。(左側の数字は行数です) ----------------------------------- 1 PROCEDURE テスト(O_カーソル IN OUT 情報カーソル) IS 2 TYPE curType IS REF CURSOR; 3 tmpCur curType; 4 sqlStr VARCHAR2(32767); 5 6 7 BEGIN 8 9 sqlStr := 'SELECT ' 10 sqlStr := sqlStr || 'A,B ' 11 sqlStr := sqlStr || 'FROM' <<省略>> 12 OPEN tmpCur FOR sqlStr ←エラー発生 13 O_カーソル := tmpCur; --取得したカーソルを返す 14 END テスト; ----------------------------------- (1)SQL文をCLOB型にしてみる:コンパイルエラー 4 sqlStr CLOB (2)SQL文を「||」でつなげてみる:文字列バッファが小さすぎますでエラー Dim sqlStr1 VARCHAR2(32767); Dim sqlStr2 VARCHAR2(32767); Dim sqlStr3 VARCHAR2(32767); <<省略>> 12 OPEN tmpCur FOR (sqlStr1 || sqlStr2 || sqlStr3 <<省略>> ) SELECT文のソート条件 PL/SQLのカーソル定義にて困っています。 SELECT文のORDER BYでソートをかけますが、 例として、引数を2つ与えとします。 2つの値が同値であった場合、次にソートの条件となるのは何なのでしょうか? GROUP BY,WHERE句等はありません。 初歩的な質問過ぎて逆に中々見つけられませんでした。 どなたかご存知の方、教えて頂けますでしょうか。 よろしくお願いします。 カーソルについて カーソルってオープン時に該当データの全レコードセットを取得するんでしょうか?。 PL/SQLでVIEWのカーソルをオープンし、ループ処理を行っているんですが、処理速度からして1フェッチごとに毎回SELECT文を発行しているように見受けられます・・・。 ソースはこんな感じです↓。 declare cursor cur_tb_1 is select * from ビュー; begin for rec_tb_1 in cur_tb_1 loop ...処理いろいろ end loop; end; また、このようなケースの場合、VIEWのSELECT結果を一時テーブルにINSERTし、そのテーブルをSELECTするカーソルを使用するほうが 作法的によいのでしょうか? ネットワークエンジニアとは?技術職の未来を考える OKWAVE コラム FortranのOPEN文 OPEN(2,FILE='../data/'//FNAME//'c.dat') というOPEN文についての質問です.このOPEN文のファイル名の指定FILE=' 'のところがわからないので,教えていただきたいのです. ドット二つ(..)とスラッシュ1本(/),二本(//)の意味など,わかる方よろしくお願いします. オープンオフィス BASE で オープンオフィス BASE で AccessでのVBA、SQL文、に相当する記述はどのようにしますか SQL文は Delete、Insert、Update、Select の記述方法 複雑なようでしたら 何を学習すれば理解できるのか教えてください。 よろしくお願いいたします。 SELECT * FROM セレクト文の解釈 SQL文について SELECT CustomerID, CompanyName FROM Customers セレクト文なのですがセレクトは その名の通り「選ぶ」という意味で fromは「から」という意味だと思うのですが select * from は「~から選んだ」みたいな解釈で良いのでしょうか? SQL初心者です。 カーソル宣言をIFで分けられませんか? よろしくお願いします。 Pro*Cで作成しているのですが、カーソルの宣言時に指定するSQLをIF文で分けようとすると、 コンパイル時に「PCC-W-02332, SQLの識別子を再定義しようとしました。」が表示されます。 IFの結果がどうであれ、カーソルが取得するレイアウトが同一かつ、OPEN後の処理も同じように処理するため、できれば同一のカーソル名で行いたいです。 以下は今の状態を簡略化したプログラミングですが、 どのように対処するのが良いのでしょう。 Oracle10.2です。 よろしくお願いします。 ------------------------------------------------------- int flg; <中略> if ( flg == 0 ) { EXEC SQL DECLARE curname CURSOR FOR SELECT tbl.col1, 'flgが0です' AS col2 FROM tbl ; } else { EXEC SQL DECLARE curname CURSOR FOR SELECT tbl.col1, 'flgが0以外です' AS col2 FROM tbl ; } EXEC SQL OPEN curname; EXEC SQL WHENEVER NOT FOUND DO BREAK; while(1) { EXEC SQL FETCH rackBCCur INTO :retVals <略> } ------------------------------------------------------- PL/SQL カーソルのFROM句にカーソル もしご存知の方がいればお教えください。 ORACLE PL/SQLで CURSOR cur_a AS SELECT a FROM TBLA とカーソルを宣言し そのカーソルを他のカーソルで 使用することは可能でしょうか? 以下のような感じで CURSOR cur_B AS SELECT b FROM TBLB,cur_a ご存知の方が居たら どのようなSELECT文を 書けばよいかお教えください よろしくお願いいたします セレクト文について sqlのセレクト文について質問させて下さい。 フィールドのレコードに、a,b,c,d,eと登録されているデータから、"c"のデータだけをセレクト対象にしたい場合、どのようにsqlを書けばよいのでしょうか? 通常のセレクト文だと、WHERE句に、(フィールド名 = '値')などで格納されている値とデータの比較ができるかと思うのですが、上記のような場合はどのように指定するのでしょうか? フィールドを無駄に増やし過ぎないよう、カテゴリごとに配列をjoinでまとめたものをDBへ登録しているのですが、この場合だとイメージしているようなことは無理なんでしょうか? 宜しくお願い致します。 SELECT文でLEFT関数を使うと未定義関数ですと言われる VBソース上では SELECT LEFT(~~~,4) AS 項目 FROM テーブル と SELECT文で書いてもエラーにならずオープンできるみたいなのですが そのSQL文をACCESS2000上で動かすと 未定義関数LEFTがあると言われます どなたか分かる方至急お願いします!!! SQLのSELECT文教えてください。 VB5.0で、DBはSqlServer2000です。 SQL文のSELECT文で質問です。 ○A_TABLEの構成(概略) ・・・担当コード1・・・担当コード2 ○TANTO_TABLE 担当コード/担当名 (質問)TANTO_TABLEからA_TABLEの担当コード1と担当コード2の担当名を抽出したいのです。 次のSQLだと担当コード1のみしか抽出できません。 効率よく担当コード1と2の担当名を抽出するSQLを教えてください。お願いします。 SELECT 担当名 FROM A_TABLE,TANTO_TABLE WHERE A_TABLE.担当コード1 = TANTO_TABLE.担当コード 過去の質問を見て分からなかったSQL文があります お世話になります。 過去の質問の中で、文法が分からないものがあったので、教えてください。 [QNo.1118130] 全テーブルのデータの行数 という質問の中のNo.1の方の回答で次のようなSQL文がありました。 -------------------------------------------------------------------------------------- DECLARE @name nvarchar(30) DECLARE @sql nvarchar(200) DECLARE TCUR CURSOR FOR SELECT name FROM sysobjects WHERE type = 'U' OPEN TCUR FETCH NEXT FROM TCUR INTO @name -----・・・(1) WHILE (@@fetch_status <> -1) BEGIN SET @sql = 'SELECT count(*),''' + @name + ''' AS TNAME FROM '+ @name -----・・・(2) EXEC(@sql) FETCH NEXT FROM TCUR INTO @name -----・・・(3) END CLOSE TCUR DEALLOCATE TCUR -------------------------------------------------------------------------------------- (1)の部分について "INTO @name"の部分で、@name には何を入れているのでしょうか? (2)の部分について 最初の 'SELECT count(*),'の部分は分かるのですが、これ以降で"'(シングルクォーテーション)"が沢山あって、何を囲っているのか分かりませんでした。 ("'"が多用されていて分かりませんでした) (3)の部分について (1)と全く同じ文ですが、(1)と(3)でやっていることは違うのでしょうか。 すみませんが、アドバイスお願いします。 AIは使う人の年齢や市場にも影響する?人工知能の可能性 OKWAVE コラム PL/SQLについて PL/SQLについて お世話になります。 現在Oracle 11gと.Net C#で開発をしている物です。 正直どちらも初心者で悪戦苦闘している日々ですが、 PL/SQLのカーソルについて知りたい事があります。 PL/SQLでカーソルを作成しました。 そしてその同一ストアドプロシージャ文の中で、 先のカーソルの結果で得られた値から別の新たなカーソル でまた新たな結果を返すと言う様な、二重カーソルの様な 事は可能でしょうか。 どなたかご親切な方、ご教授頂きたく宜しくお願い致します。 出来れば、サンプルや、HP等ご紹介頂ければありがたく 思います。 【SQL】SELECT文 こんにちは。OracleのSQLを勉強中の者です。 SELECT文について質問させてください。 下記のテーブルから購入フラグがすべて「1」のユーザ名を抽出したいのですが、SQL文をご教授いただけますでしょうか。 テーブル名:商品購入テーブル ユーザ名 商品名 購入フラグ ---------- ---------- -------------- 001 AAA 1 001 BBB 1 001 CCC 0 002 DDD 1 003 AAA 1 003 EEE 1 004 CCC 0 このテーブルからですと、002と003のユーザが抽出される形となります。 以上、よろしくお願いいたします。 fortranのopen文について。 fortranのopen文のファイル名を指定するするとき、doループで名前を変えたいのですが、どのようにやればよいでしょうか? 具体的には、 do i=1,2 open(unit=10+i,file='file.dat',status='replace') とした時、unitと共にファイル名も'file1.dat'、'file2.dat'と変わるようにしたいのです。 よろしくお願いします。 カーソルオープンの処理について バッチ処理をするために、DB2の埋め込みSQLを使用していますが問題があります。 処理対象のデータが大量にあるのですが、カーソルのオープン処理で時間がかかってしまうため、時間内に終了することができません。 カーソルオープン処理を早くする方法がありましたら教えていただけますでしょうか。 ちなみに、 1.取得件数とオープン処理速度は全く関係がないように見えます。 2.インデックスを貼ってみましたが、変わりませんでした。 よろしくお願いいたします。 PL/SQLでFROM句に変数を使いたい PL/SQL初心者なので方法があるかないかもわかりません。 SELECT TABLE_NAME FROM USER_TABLES で取得したテーブルを PQL文に使用したいのですが可能ですか? 一応動的(DBMS_SQLを使用した方法)にSQLを作成することはできたのですが パフォーマンスを考えると静的に使用したいのです。 動的、静的の表現でいいのかわかりませんが普通に PL/SQL中にSQL文を使いたいんですがいかがでしょうか? PL/SQLでのSQL文法 こんにちは。教えてください。 PL/SQLを使うのが初めで戸惑っています。 まず、PROCEDUREで =========================== BEGIN SELECT NAME FROM TABLE1 WHERE NAME='tanaka'; END; / =========================== このように書いて実行させようとすると、「コンパイルエラー」 「INTO句はこのSELECT文に入ります」というエラーが出ます。 SQLの文法的には間違ってないと思うのですが、INTO句とはこれいかに?? ネットでPL/SQLで検索かけて調べたのですがあまりにも初歩すぎて わかりませんでした。 PL/SQLやORACLEのメーリングリストでお勧めがありましたら教えてください。 よろしくお願いいたします。 Selectの処理速度改善について 先日、PL/SQLの開発について、こんな質問を受けました。 「SQLを組むさい、処理速度を速めるためにやっていることは?」 と。 で、ちょっと考えて 「Selectなら、Indexを考慮してSelect文を作成し、実行します。 処理時間がかかる場合は、実行計画などをみて、 Select文にヒント句をつけて、処理速度を改善します。」 と答えました。 答えたあと、質問者された方は、なんだかがっかりした感じでしたが、 私の回答は不適切だったのでしょうか? それとも、どういう回答が良かったのでしょうか? よろしくお願いします。 SQL 繰り返し処理をSQLでかく方法 質問させてください。 FOR文を使うことなしに、繰り返し処理をいくつかのSELECT文にわけて処理をするにはどのようにかけば良いのでしょうか。 標準SQLです。 注目のQ&A 「You」や「I」が入った曲といえば? Part2 結婚について考えていない大学生の彼氏について 関東の方に聞きたいです 大阪万博について 駅の清涼飲料水自販機 不倫の慰謝料の請求について 新型コロナウイルスがもたらした功績について教えて 旧姓を使う理由。 回復メディアの保存方法 好きな人を諦める方法 小諸市(長野県)在住でスキーやスノボをする方の用具 カテゴリ [技術者向] コンピューター データベース SQL ServerOraclePostgreSQLMySQLNoSQLその他(データベース) カテゴリ一覧を見る OKWAVE コラム 突然のトラブル?プリンター・メール・LINE編 携帯料金を賢く見直す!格安SIMと端末選びのポイントは? 友達って必要?友情って何だろう 大震災時の現実とは?私たちができる備え 「結婚相談所は恥ずかしい」は時代遅れ!負け組の誤解と出会いの掴み方 あなたにピッタリな商品が見つかる! OKWAVE セレクト コスメ化粧品 化粧水・クレンジングなど 健康食品・サプリ コンブチャなど バス用品 入浴剤・アミノ酸シャンプーなど スマホアプリ マッチングアプリなど ヘアケア 白髪染めヘアカラーなど インターネット回線 プロバイダ、光回線など