Oracle11gのPL/SQLで動的SQLを使おうと思うのですが、下記エラーが発生してしまいます。
どこが間違っているのか、いろいろと変更してみたのですが、わかりませんので、教えてください。
「ORA-06502:PL/SQL:数値または値のエラー:文字から数値への変換エラー。が発生しました」
ワークのテーブルを一旦削除してから、新規に追加し、データを登録する処理です。
EXECUTE IMMEDIATE 'DROP TABLE AAA_WK';
EXECUTE IMMEDIATE 'CREATE TABLE AAA_WK AS SELECT * FROM AAA WHERE SUBSTR(REPLACE(STRDATE, '/' ,'') ,1 ,6) > ' || ls_month_max;
EXECUTE IMMEDIATE 'TRUNCATE TABLE AAA';
EXECUTE IMMEDIATE 'INSERT INTO AAA SELECT * FROM AAAA_WK';
STRDATE:文字列の日付~時刻が入っています(例:2016/09/10 12:10:10)
ls_month_max:'201608'の文字列です
2つ目のEXECUTE IMMEDIATEでエラーが発生します。
ある年月(201608)より大きいデータを取得したいです。
TO_NUMBERにして変数も数値型にして書いてもダメでした。
変数(ls_month_max)をシングルコートで囲ってもダメでした。
相談できる人がいないため、よろしくお願いいたします。
A 回答 (2件)
- 最新から表示
- 回答順に表示
No.2
- 回答日時:
STRDATEってのは、本当に文字列(VARCHAR2型など)ですか?
DATE型なら、TO_CHAR(STRDATE, 'YYYYMM')としないとダメですよ。
SELECT SUBSTR(REPLACE(STRDATE, '/' ,'') ,1 ,6)
FROM AAA
で返ってきてる値は正しいですか?
また、テーブル列を加工するとインデックスが効きません。
要件にもよりますが、やるなら
STRDATE BETWEEN 開始日 AND 終了日
とかの方がいいと思います。
あと、ここにあるように、SQLの解析が都度発生するため、プレースホルダーを利用したクエリにした方がいいでしょう。
http://www.shift-the-oracle.com/plsql/native-dyn …
一度きり、およびそこまでパフォーマンスが気にならないデータ量ならどうでもいいです。
> STRDATEってのは、本当に文字列(VARCHAR2型など)ですか?
はい、VARCHAR2です。
登録日時を文字列型で持っています。
> SELECT SUBSTR(REPLACE(STRDATE, '/' ,'') ,1 ,6) FROM AAA
これは通ります。
select * from AAA
where SUBSTR(REPLACE(STRDATE, '/' ,'') ,1 ,6) > '201608'
これでデータが取得できます。
記載いただいたURLを参考に、バインド変数にしてみましたが、同じ結果でした。
ls_sql := 'CREATE TABLE AAA_WK AS SELECT * FROM AAA WHERE SUBSTR(REPLACE(STRDATE, '/' ,'') ,1 ,6) > :"month"';
EXECUTE IMMEDIATE ls_sql USING IN ls_month_max;
No.1
- 回答日時:
テーブルAAAと、AAA_WKの構造が違うんじゃないんですか?
条件はともかくとして、
CREATE TABLE AAA_WK AS SELECT * FROM AAA
で通るんですか?
naktakさん
ありがとうございます。
CREATE TABLE AAA_WK AS SELECT * FROM AAA
これは実行できています。
WHERE句をなくして
EXECUTE IMMEDIATE 'CREATE TABLE AAA_WK AS SELECT * FROM AAA'
とすると、実行でき、データも入ってきますので、WHERE句の部分がおかしいようです。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Access(アクセス) アクセス 有効なフィールド名、または式として認識できませんのエラー 3 2022/08/19 11:53
- Access(アクセス) アクセス where句を使用して複数条件抽出をするには 2 2022/08/29 13:24
- PHP DBのハッシュ化したパスワードをpassword_verifyで戻し照合したのですが上手く行きません 2 2023/02/06 13:24
- PHP 重複を防ぐ記述について教えて下さい。 3 2023/04/03 14:35
- Excel(エクセル) EXCELの「接続」のSQLのコマンド文字列にて、セルから任意の数値を利用したい 2 2023/03/09 16:43
- MySQL SQLです。こんな感じですか?あってますか? うまくいきません教えてくださいお願いします 1 2023/07/08 15:27
- SQL Server [SQLServer] テーブル名からカラム名を取得する 1 2022/08/23 21:20
- Visual Basic(VBA) access count数を変数に格納 2 2022/03/30 19:21
- CGI perlで書いたcgiでsqliteの使い方を教えてください 2 2023/05/08 21:29
- MySQL SQLです。下記の問合せを行うクエリを、PhpMyAdminで作成して実行せよ。 「昨年の各月の総降 1 2023/07/01 00:32
このQ&Aを見た人はこんなQ&Aも見ています
-
好きなおでんの具材ドラフト会議しましょう
肌寒くなってきて、温かい食べ物がおいしい季節になってきましたね。 みなさんはおでんの具材でひとつ選ぶなら何にしますか? 1番好きなおでんの具材を教えてください。
-
一回も披露したことのない豆知識
あなたの「一回も披露したことのない豆知識」を教えてください。 「そうなんだね」と「確かに披露する場所ないね」で評価します。
-
初めて自分の家と他人の家が違う、と意識した時
子供の頃、友達の家に行くと「なんか自分の家と匂いが違うな?」って思いませんでしたか?
-
自分のセンスや笑いの好みに影響を受けた作品を教えて
子どもの頃に読んだ漫画などが その後の笑いの好みや自分自身のユーモアのセンスに影響することがあると思いますが、 「この作品に影響受けてるな~!」というものがあれば教えてください。
-
好きな「お肉」は?
牛肉、豚肉、鶏肉、ラム肉、クマやシカの狩猟肉……。 いろ〜んな肉が食べられるようになりましたよね。 あなたがこれまで食べて「これはうまい!」とか「なんじゃこりゃ!」と好きになったお肉を教えてください。
-
PL/SQLをWindowsのBATファイルで実行するには
Oracle
-
CASE文のエラーについて
Oracle
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・プリン+醤油=ウニみたいな組み合わせメニューを教えて!
- ・タイムマシーンがあったら、過去と未来どちらに行く?
- ・遅刻の「言い訳」選手権
- ・【大喜利】【投稿~11/12】 急に朝起こしてきた母親に言われた一言とは?
- ・好きな和訳タイトルを教えてください
- ・うちのカレーにはこれが入ってる!って食材ありますか?
- ・好きな「お肉」は?
- ・あなたは何にトキメキますか?
- ・おすすめのモーニング・朝食メニューを教えて!
- ・「覚え間違い」を教えてください!
- ・とっておきの手土産を教えて
- ・「平成」を感じるもの
- ・秘密基地、どこに作った?
- ・【お題】NEW演歌
- ・カンパ〜イ!←最初の1杯目、なに頼む?
- ・一回も披露したことのない豆知識
- ・これ何て呼びますか
- ・初めて自分の家と他人の家が違う、と意識した時
- ・「これはヤバかったな」という遅刻エピソード
- ・これ何て呼びますか Part2
- ・許せない心理テスト
- ・この人頭いいなと思ったエピソード
- ・牛、豚、鶏、どれか一つ食べられなくなるとしたら?
- ・ハマっている「お菓子」を教えて!
- ・【大喜利】【投稿~11/1】 存在しそうで存在しないモノマネ芸人の名前を教えてください
- ・好きなおでんの具材ドラフト会議しましょう
- ・餃子を食べるとき、何をつけますか?
- ・あなたの「必」の書き順を教えてください
- ・ギリギリ行けるお一人様のライン
- ・10代と話して驚いたこと
- ・つい集めてしまうものはなんですか?
- ・自分のセンスや笑いの好みに影響を受けた作品を教えて
- ・【お題】引っかけ問題(締め切り10月27日(日)23時)
- ・大人になっても苦手な食べ物、ありますか?
- ・14歳の自分に衝撃の事実を告げてください
- ・【大喜利】【投稿~10/21(月)】買ったばかりの自転車を分解してひと言
- ・ホテルを選ぶとき、これだけは譲れない条件TOP3は?
- ・家・車以外で、人生で一番奮発した買い物
- ・人生最悪の忘れ物
- ・【コナン30周年】嘘でしょ!?と思った○○周年を教えて【ハルヒ20周年】
- ・あなたの習慣について教えてください!!
- ・都道府県穴埋めゲーム
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
ORA-01013のエラーについて経験...
-
PL/SQLのコンパイルエラーにつ...
-
PL/SQL PLS-00103エラーについて
-
CASE文のエラーについて
-
「ORA-00907: 右カッコがありま...
-
トリガーのエラー
-
【PL/SQL】SQL文が長すぎてSELE...
-
PRO*COBOLのSQLCTXの桁数変更
-
PCC-S-02201エラーの対処を教え...
-
ORA-06502のエラー
-
シェルスクリプトでオラクルの...
-
オラクル表領域データファイル...
-
ストアドファンクションの実行
-
ORA-1403
-
エラーコードについて
-
DATABSE LINKについて
-
pro*c で pl/sql に変数を渡す...
-
データベースのカラムの型がCHA...
-
はじめまして!
-
dmpファイルのインポート時にで...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
ORA-01013のエラーについて経験...
-
CASE文のエラーについて
-
PL/SQLのコンパイルエラーにつ...
-
ORA-01843: 指定した月が無効で...
-
PL/SQL PLS-00103エラーについて
-
はじめまして!
-
シェルスクリプトでオラクルの...
-
「ORA-00907: 右カッコがありま...
-
sqlのエラーハンドリングについ...
-
PCC-S-02201エラーの対処を教え...
-
SQLLOADER
-
ACCESSでパススルークエリにパ...
-
HAVING句でのBETWEEN演算子
-
ORA-14459: GLOBALキーワードが...
-
PL/SQLによるCREATE TABLE後のI...
-
PL/SQLでPLS-00201のエラー
-
無効なSQL文の具体例を教えてく...
-
pro*c で pl/sql に変数を渡す...
-
DATABSE LINKについて
-
ORA-06502のエラー
おすすめ情報
自己解決しました。
変数のところではなく、REPLACEしている箇所のシングルコーテーションをエスケープ(?)していないのが原因でした。
EXECUTE IMMEDIATE 'CREATE TABLE AAA_WK AS SELECT * FROM AAA WHERE SUBSTR(REPLACE(STRDATE, ''/'' ,'''') ,1 ,6) > ''' || ls_month_max || '''';
ちなみにCREATE文の場合、バインド変数は使えないようです。