問題タブ [ora-01722]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
oracle - クエリから START WITH を使用してシーケンスを作成する
START WITH 値がクエリから取得されるシーケンスを作成するにはどうすればよいですか?
私はこのようにしようとしています:
CREATE SEQUENCE "Seq" INCREMENT BY 1 START WITH (SELECT MAX("ID") FROM "Table");
しかし、ORA-01722エラーが発生します
oracle - DBA でない限り、Oracle に接続できません
新しいユーザーを作成したところ、作成セッションがありますが、PLSQL Developerに接続しようとするたびに、ORA-00604、ORA-01722、およびORA-06512が発生します
ただし、DBA アクセスを許可すると、問題なくログオンできます。
ヒント?接続トリガーがありません。
sql - to_number() に関する別の問題。私は単にそれを理解していません
マスター テーブル (以降、SURVEY と呼びます) と詳細テーブル (以降、ANSWERS と呼びます) があります。当然のことながら、ANSWERS には SURVEY の質問に対する回答があります。ANSWERS には、TEXT という名前の VARCHAR2 列があります。一部の ANSWERS.TEXT 値は実際にはテキストですが、一部は実際には数値です。幸いなことに、どの行にテキストが含まれ、どの行に数値がテキストとして含まれているかは常にわかっています。
これがその通りです。これを変更することはできません。
昔、特定の ANSWERS 行が保存されたとき、それらの TEXT 値は厳選され、適切に型指定された列の SURVEY テーブルに入れられました。単純な 1 つのテーブルを選択すると、SURVEY と特別な値がフェッチされます。
しかし、新しいアプリケーションの追加に伴い、特別な列を削除しました。代わりに、適切な ANSWERS 行の TEXT 値を取得する必要があります。
古い単純な select ステートメントをシミュレートするクエリを作成しました。それはうまく機能します...ほとんど。
ここにスニペットがあります:
j2 に注意してください。実際のクエリには、j1 から j6 までの 6 つの列があります。クエリを実行すると、古いクエリと同じように見えます。マスター/ディテールから実際に組み立てられているとは言えません。それは安心です!
しかし、私の問題は、「overall_score > 70」というフレーズが「1722 無効な数値」エラーを引き起こすことです。オラクルは、私がこのフレーズを含めないときは満足しています。そのため、すべての出力は j2 の to_number() 関数を通過し、見栄えがよくなります。しかし、条件を追加すると失敗します。
where 句の「overall_score」部分は、Web ページから入力された検索基準に基づいて動的に追加されています。
オラクルに、私が何をしているのか本当に知っていると伝えるためのフーが必要です。実行してください。数値以外のデータがある場合は、j2 の to_number() を失敗させます。涼しい。しかし、それ以外の場合は、それを実行してください。
賢い言葉はありますか?私は請負業者であり、時間が迫っています。これは新しい要件です:-/
c# - ORA-01722 (無効な番号) が表示されるのはなぜですか?
次のように、パラメーター化されたクエリを使用して、値を Oracle テーブルに挿入しています。
これは正常に機能していましたが、突然機能しなくなり、Oracle エラー ORA-01722 (無効な番号) が発生しました。パラメータを確認しましたが、すべての数値は間違いなく有効な数値です。ヌルをダミー値に置き換えても、エラーが発生します。Direct SQL (OraDeveloper Studio を使用) で同じクエリを試してみましたが、同じパラメータでも機能します。
これを追跡するにはどうすればよいですか?
編集:コメントのリクエストごとに、create table ステートメントは次のとおりです。
c# - Oracle の C# パラメーター化クエリ - 深刻で危険なバグ!
これは絶対的な遠吠えです。私は自分の目を信じることができず、これが C# の本物のバグであるとしたら、私より前に誰もこれを発見しなかったとは信じられません。この質問には、「DOH!」と言うことが含まれると確信しています。手のひらで私の頭を強くたたきました - とにかく、ここに行きます...
Test_1
テストのために、次のスクリプトを使用してテーブルを作成しました。
ここで、次のコードを実行します。
うわあ!ORA-01722 エラー - 「無効な番号」が表示されます。しかし、何が問題なのですか? Column1
数値であり、値が 1 であるため、問題ありません。Column2
は文字列でありColumn3
、null 可能な列であるため、問題は発生しません...
さて、これについて座ってください...ここでの問題は、Column3
とColumn2
が に追加される順序で転置されることOracleParameterCollection
です。それらを切り替えて、早速!できます!
もちろん、これは次の明らかな実験につながります...次のようにパラメーターを追加するためにコードのブロックを変更しましょう。
うまくいくと思いますか?何を推測しますか-それはあります!
私は完全に唖然としてここに座っています。私は自分が見ているものを信じることができず、同様に、私の前に誰もこの振る舞いを発見していないとも信じられません (Google の適切な使い方を知らない限り)。
これは単なる煩わしさではなく、非常に危険です。同じデータ型の 2 つの列を転置したらどうなるでしょうか? エラーが発生することさえありませんでした.間違ったデータを間違った列に挿入しただけで、賢明ではありませんでした.
パラメータを間違った順序で追加しないように注意する以外に、回避策のアイデアはありますか?
sql - オラクルのコストベースのオプティマイザーが不適切な最適化を行うのをどのように防ぎますか?
次のシナリオを検討してください。stupid_table
制御できないスキーマにテーブル (a ) があります。立ち入り禁止の第三者です。触らない。クエリはできますが、インデックスや新しいテーブルを追加したり、デザインを変更したりすることはできません。
のすべての列はstupid_table
です。多くの列がありますが、必要なのはとVARCHAR2(50 BYTE)
の 2 つだけです。には整数の文字列表現が取り込まれますが、が に設定されている場合のみ、0 より大きいマジック ナンバーのみが必要です。row_type
magic_number
magic_number
row_type
'DATA'
これにより、"無効な数値" という Oracle エラーが発生します。これは、Cost Based Optimiser (CBO) が をTO_NUMBER
チェックする前にを評価することを選択しており、フィールドの使用方法が異なる多数row_type
の行があるためです。row_type
magic_number
では、最初に行をフィルター処理してから比較するとどうなるでしょうか?
現在、CBO は、クエリが非常に単純であり、私が採用した狡猾さを無視して、元のクエリ プランと同じクエリ プランを生成していることに気付いたようです。
最後に、フラストレーションを感じて、私は汚いハックに頼り/*+RULE*/
ます。クエリ ヒントを使用して、Oracle に古いルール ベースのオプティマイザーを強制的に使用させます。これは夢のように機能しますが、サポートされなくなった Oracle の機能を使用していることは言うまでもなく、必要ではありません。
これを行うより良い方法はありますか?
ruby-on-rails - Rails 3およびOracle:NLS設定は小数点記号を拒否します
読み取り専用のOracleデータベース(oracle_enhanced_adapterを介して接続)でRuby onRails3.0を使用しています。
既知の「n+1クエリ」の問題が発生した場合、includesメソッドを試しました。
Railsガイドの説明とは異なり、生成された2番目のクエリは、必要なIDを整数ではなく、float値の文字列表現としてリストしました。元のIDのタイプはNUMBERです。
残念ながら、データベースのNLS設定はドイツ向けであり、NLS_NUMERIC_CHARACTERS
小数点記号として「、」を使用するものも含まれます。したがって、ここで説明するように、常にORA-01722エラーが発生します。
より正確に:
@var.assoc.includes(:another_assoc).where("column_1 = ?", some_value)
収量
ActiveRecord :: StatementInvalid:OCIError:ORA-01722:invalid number:SELECT"TABLE_A"。*FROM "TABLE_A" WHERE("TABLE_A"。"ID" IN( '1715.0'、 '1716.0'、 '1717.0'、 '1718.0' 、'1719.0'、' 1720.0'、' 1721.0'))
(上記のRailコードには、「文字列から記号」への変換などの気が散る詳細が含まれているため、単純化する必要がありました)
前述のように、データベースは読み取り専用であるため、
データベースに直接取り組んだ。しかし、レールセッションを変更する正しい方法を見つけることができませんでした。
私が見つけたものはすべて、Rails 2を参照しているか、非推奨の関数を使用しているようでした。
Rails 3.0でこれを解決するにはどうすればよいですか?
または、Rails(またはoracle_enhanced_adapter)にリストされているすべてのIDをFixnumに変換させるにはどうすればよいですか?
よろしくお願いします、ティム
oracle - エラー 500: ハイバネート マッピングでコレクションを初期化できませんでした
私はHibernateの初心者です。本当に私を夢中にさせる以下のエラーのデバッグを手伝ってくれることを願っています。
CONTENT_WORKGROUP_ROLE という別のテーブルにマップされる CONTENT_WORKGROUP というテーブルを取得しました。以下は、テーブル構造とサンプル データです。
CONTENT_WORKGROUP
- CM_WORKGROUP_ID NUMBER(15,0)
- WORKGROUP_ID NUMBER(15,0)
- ROLE_ID VARCHAR2(20バイト)
CONTENT_WORKGROUP_ROLE
- CM_WORKGROUP_ROLE_ID NUMBER(15,0)
- ROLE_ID VARCHAR2(20バイト)
- FUNCTION_ID VARCHAR2(40バイト)
P/S: 1 つのユーザー ワークグループが複数の役割 (作成者、管理者、承認者) を持つことができます。このワークグループで実行できる機能(追加、編集、削除)は、CONTENT_WORKGROUP_ROLE からクエリできます。
サンプルデータ:
CONTENT_WORKGROUP
CM_WORKGROUP_ID WORKGROUP_ID ROLE_ID
1 136 作成者
2 137 管理者
3 136 管理者
CONTENT_WORKGROUP_ROLE
CM_WORKGROUP_ROLE_ID ROLE_ID FUNCTION_ID
1 作成者 コピー
2 作成者 編集
3 作成者 削除
4 作成者 追加
5 管理者 編集
6 管理者 承認
7 管理者 拒否
ただし、特定のワークグループが保持する ContentWorkgroupRole の SET を取得すると、エラーが発生します。
[11/23/10 15:28:56:053 SGT] 00000039 SystemOut O [23/11/2010 15:28:56.053] エラー JDBCExceptionReporter - ORA-01722: 無効な番号
[11/23/10 15:28:56:100 SGT] 00000039 ServletWrappe E SRVE0068E: サーブレットのサービス メソッドの 1 つでキャッチされない例外がスローされました: アクション。スローされた例外: javax.servlet.ServletException: コレクションを初期化できませんでした: [corp.celcom.next.infochannel.model.ContentWorkgroup.contentWorkgroupRole#1]
以下は、私の休止状態のマッピング ファイルです: ContentWorkgroup.hbm.xml
CM_WORKGROUP CM_WORKGROUP_ID
ContentWorkgroupRole.hbm.xml
CM_WORKGROUP_ROLE_ID CM_WORKGROUP_ROLE
私の ACTION クラスでは、上記のエラーが次の行で発生しました: Iterator iter = cw.getContentWorkgroupRole().iterator();
for(ContentWorkgroup cw : contentWorkgroupList) { Iterator iter = cw.getContentWorkgroupRole().iterator();
myForm.setAllowAdd(true); if (role.getFunctionId().equalsIgnoreCase(Constant.EDIT)) myForm.setAllowEdit(true); if (role.getFunctionId().equalsIgnoreCase(Constant.DELETE)) myForm.setAllowDelete(true); } }
奇妙な部分は、文字列を使用する代わりに、ROLE_ID を Integer/Long (つまり、1-Creator、2-Administrator) に変更すると、正常に動作することです! コードの問題の理由と内容を理解できませんでした。
助けてくれてありがとう。このエラーに対処するのに、すでに 1 日かかりました。ありがとう!
oracle - 「安全」 TO_NUMBER()
これは明らかに私に例外を与えます:
ORA-01722: 番号が無効です
それを「スキップ」して、0
またはNULL
代わりに取得する方法はありますか?
全体の問題:NVARCHAR2
数字を含むフィールドがあり、ほとんどではない ;-) (のように*
) で、列から最大の数字を選択する必要があります。
はい、私はそれがひどいデザインであることを知っていますが、これは私が今必要としているものです... :-S
更新日:
私自身のために、私はこの問題を解決しました
java - .nextval JDBC 挿入の問題
シーケンス .nextval を主キーとしてテーブルに挿入しようとしましたが、Java の SQL は
ただし、エラーはORA-01722: invalid number
他のすべてのフィールドは正しいです。これは順序の問題だと思いますが、これは正しいですか?