• ベストアンサー

pg/plsqlでのカーソルのLIKEの記述方法

連続で投稿まことに申し訳ありません できればこちらの方を優先的にお返事いただけると幸いです。 ストアドファンクションのDECLARE部で カーソル部のLIKEのところの記述がうまく検索されません。 ご教授いただけると幸いです。 *このように記述してみました mycursor CURSOR(key text) FOR SELECT * FROM tabel1 in WHERE id LIKE ''%key%'';

質問者が選んだベストアンサー

  • ベストアンサー
回答No.1

こんばんは。 囲み方が変・・・かな??? %は文字列だけど、Keyは出さないとダメだと思います・・・。 (^^ゞ

VIPFIRE
質問者

お礼

こんばんは ご指摘のとおりで mycursor CURSOR(key text) FOR SELECT * FROM tabel1 in WHERE id LIKE ''%'' || key || ''%''; このようにすることによってうまくいきました。 助かりました、有難うございます!

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • ストアドプロシージャ_カーソルのヒット件数

    いつもお世話になっています。 SQLServer7.0です。 ストアドプロシージャでカーソルを使用し、オープンしたカーソルの件数を調べたいのですがうまくいきません。 Declare curs2 cursor for Select [項目名] From [テーブル名] Where [検索条件] Open curs2 Print @@CURSOR_ROWS この「@@CURSOR_ROWS」変数でヒット件数を取得できるように参考書では書いてあるのですが、実際Printしてみると、カーソルをオープンする前だと 0 で、オープンした後だと-1 です。 特にエラーだとか、対象データがないというわけではありません。実際その後ヒットした件数分行う処理は正常に出来ています。 ただ、どうしても処理を行う前に件数を知りたいのです。カーソルの変数だけでは取れないとなると セレクトしたカーソルと全く同じセレクトを実行して@@ROWCOUTで取るしかないかなって思ってるのですが・・・。どうも建設的ではないなって思ってます。 カーソルの件数を取得するにはどうしたらよいのでしょうか?

  • PLSQLの識別子エラー

    下記PLSQLを実行した時に(sqlplus上で、@XXXX.SQLと実行) WCOUNT :=WCOUNT + 1; エラー PLS-00201: 識別子WCOUNTを宣言してください のエラーがでます 宣言をしているのですがわからず、お助けください また、他にもこのエラーを処置したあとに問題と なりそうな箇所があれば指摘お願いします -やろうとしてること (1)テーブルA を、男子を出席順に読み込んでその読み込んだ順番に 1から番号をふり、テーブルBへ新規追加する (2)テーブルAからテーブルBに新規追加していない女子を、出席順に読み込んで 1から番号をふり、テーブルBへ新規追加する (3)テーブルBのKEYは順番のみ (4)テーブルBのINSERT分は、今後機能追加する予定なのでNOT IN使用する -組んだPL/SQL(2つのINSETを1つのファイルに記述しています) DECLARE WCOUNT number; CURSOR カーソル IS SELECT 出席番号,名前,成績 FROM テーブルA  ORDER BY 出席番号; BEGIN FOR r IN カーソル LOOP INSERT INTO テーブルB (r.順番, r.名前,r.出席番号) VALUES (WCOUNT,r.名前); COMMIT; WCOUNT :=WCOUNT + 1; END LOO; / END; DECLARE CURSOR カーソル IS SELECT 出席番号,名前,成績 FROM テーブルA A WHERE A.出席番号 NOT IN (SELECT B.出席番号 FROM テーブルB B) ORDER BY 出席番号; BEGIN FOR r IN カーソル LOOP INSERT INTO テーブルB (順番, 名前) VALUES (WCOUNT,r.名前); COMMIT; WCOUNT :=WCOUNT + 1; END LOOP; / END;

  • RLIKE vs LIKE

    ■1 SELECT `id` FROM `user` WHERE `stat` RLIKE ',1,' ■2 SELECT `id` FROM `user` WHERE `stat` LIKE '%,1,%' 1と2では、どちらが速いのでしょうか? また、 ■3 SELECT `id` FROM `user` WHERE `text` RLIKE ',(1|6|3),' ■4 SELECT `id` FROM `user` WHERE `stat` LIKE '%,1,%' OR `stat` LIKE '%,6,%' OR `stat` LIKE '%,3,%' 3と4の様に検索する値が増えて行った場合では、どちらが速いのでしょうか? ベンチとれと言われればそれまでですが、お時間頂ければ、ご教授の程 、宜しくお願い致します。

    • ベストアンサー
    • MySQL
  • PL/SQLでカーソルを指定する方法

    以下のSQL文で、 あるストアドプロシージャを作成し、その引数の値を WHERE句の検索条件に取ってカーソルを宣言したいので すが、どうやってもエラーが出ます。結果として カーソルで格納したデータを呼び出し元に返したいの ですが…。下記の文は間違ってますか? CREATE OR REPLACE PROCEDURE ss( quote IN NUMBER result OUT CHAR ) IS CURSOR cur IS SELECT empname FROM emp WHERE empno = quote; result cur%rowtype; BEGIN OPEN cur; LOOP FETCH cur INTO result; ~ END; どうかよろしくお願いします。

  • LIKE検索の場合うまくいきません

    WEBアプリとSQLServerでSELECTをするときに不正をされないように SELECT * FROM DB WHERE DB.A = 検索文字 を SELECT * FROM DB WHERE DB.A= @A のようにして、@Aを後で指定しますが、 SELECT * FROM DB WHERE LIKE '%検索文字' のようにLIKE検索の場合うまくいきません。 どのように記述したらいいのでしょうか? SELECT * FROM DB WHERE DB.A LIKE @A --> 駄目 SELECT * FROM DB WHERE DB.A LIKE '%@A' --> 駄目

  • T-SQLのカーソルで

    つい先日、ここで「T-SQLのカーソルにパラメータは使えますか?」という質問をして、使えることがわかって解決したんですけど、 実際にプロシージャで使ってみると、カーソルから結果が返りません。 以下のように書いています。 CREATE PROCEDURE hoge(@param1 int) AS DECLARE C1 CURSOR FOR SELECT CODE_1 FROM TableA WHERE COLUMN_1 = '0' AND COLUMN_2 = @param1 BEGIN .... END @param1をローカル変数に代入し、そのローカル変数をカーソルに書いても同じです。 また、カーソル定義の「@param1」をプロシージャ実行時の引数に渡していた数値に書き換えると結果は返ります。 T-SQLは初めてなもので原因が全く分かりません。 何が間違っているのでしょうか?

  • カーソルについて

    カーソルってオープン時に該当データの全レコードセットを取得するんでしょうか?。 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するカーソルを使用するほうが 作法的によいのでしょうか?

  • PL/SQL での[CURSOR]の記述について

    CURSORを使用する際に、以下のようなことが実現できるものか分からないもので、 ご質問させていただきました。 以下のような記述で、where条件を別の変数(wk_where)に格納しておいて、 それを連結させることが可能なのかお教えいただきたいです。 もしも可能であればどのように連結させるのでしょうか? CURSOR cur出力データ IS SELECT AAA, BBB FROM AAAテーブル ; イメージとしては以下のように考えていました。 CURSOR cur出力データ IS SELECT AAA, BBB FROM AAAテーブル & wk_where ; 以上ですが、宜しくおねがいいたします。

  • PL/SQL)Functionの引数(文字列)をWHERE文に記述する方法

    PL/SQLで、Functionの中で実行するselect文のWhereに、Functionの 引数で受けとった値をセットしようとしています。 この引数が文字列(VARCHAR2型)の場合、どのようにWHEREで、記述したらよいのでしょうか? ご教授のほどをよろしくお願いします。 CREATE OR REPLACE FUNCTION Fn_TBL_AAA (psCODE IN VARCHAR2) IS CURSOR TBL_AAA_CUR IS SELECT * FROM TBL_AAA WHERE BBB = psCODE ; TBL_AAA_REC TTBL_AAA_CUR%ROWTYPE;       :       : ※上記のように記述すると、実行ではエラーが発生しないのですが、  取得したい結果が返ってきません。TABLE(TBL_AAA)のBBBは、  VARCHAR2なので、通常のSQL*PLUSのSELECT文ではBBB = psCODE  はBBB = 'psCODE'のように [']で括るのですが、PL/SQLの  FUNCTION内ではどのように記述すればよいのかが  わかりません。 以上、よろしくお願いいたします。

  • 動的なSQLからカーソルを返す。

    下記のようなカーソルを返すパッケージがあったとします。 CREATE OR REPLACE PACKAGE TEST AS CURSOR C1 IS SELECT * FROM テーブル; TYPE TC1 IS REF CURSOR RETURN C1%ROWTYPE; PROCEDURE P_TEST(in条件 IN CHAR, CU OUT TC1); END; CREATE OR REPLACE PACKAGE BODY TEST IS PROCEDURE P_TEST(in条件 IN CHAR, CU OUT TC1) AS sqlStr VARCHAR2(1000); cur NUMBER; r NUMBER; BEGIN cur := DBMS_SQL.OPEN_CURSOR; sqlStr := 'OPEN CU FOR SELECT * FROM テーブル WHERE 条件 = ' || in条件; DBMS_SQL.PARSE(cur, sqlStr, DBMS_SQL.NATIVE); DBMS_SQL.DEFINE_COLUMN(cur, 1, CU); r := DBMS_SQL.EXECUTE(cur); DBMS_SQL.CLOSE_CURSOR(cur); END; SELECTした結果のカーソル(CU)をクライアントで取得したいのですけど 技術的に可能でしょうか? ストアドのコンパイル時に→DBMS_SQL.DEFINE_COLUMN(cur, 1, CU);が エラーとなります。 DBMS_SQL.DEFINE_COLUMNではカーソルタイプは取得できないとわっかたの ですがカーソルを取得する為のDBMS_SQL.DEFINE_COLUMNにかわる DBMS_SQL.?????はないでしょうか? いろいろ調べたのですが手に負えず。 どなたか教えてください。