問題タブ [varchar2]
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 - バイトをOracle Varchar2に格納し、ASCIIをテキストとして扱うにはどうすればよいですか
バイトを Varchar2 に格納し、たとえば ASCII の場合にテキストとして「通常どおり」処理するにはどうすればよいですか? (クエリのように)。
不可能な場合、制限はどこにありますか?
列が文字セットで定義されていることは知っているので、たとえば ANSI の場合、そこに入力できない 1 バイトの値は何ですか? 1 バイト文字セットの ANSI よりも「優れた」ソリューションはありますか?
sql - CLOBへの挿入が非常に遅い
'TinyString'
VARCHAR2と比較して、(単なる例の文字列)の文字列を行に格納されたCLOBに挿入すると、パフォーマンスが大幅に低下します。私の理解では、STORAGE IN ROWが有効になっているCLOBに4000バイト未満のデータを格納する場合、データはVARCHAR2と同じ方法で効果的に格納され(「オーバーフロー」4000バイトでない限り)、パフォーマンスが大幅に低下することはありません。ただし、私のベンチマーク手順*は、同じデータをCLOBに挿入するのがVARCHAR2に挿入するよりも15倍遅いことを示しています。
以下のコードをご覧ください。
いくつかのテーブルがあり、それぞれに以下のようなCOMPOUNDTRIGGERがアタッチされています。
の操作時にtarget_table
、上記のトリガーは、coll_events_hist
タイプで入力されたデータをに格納しますlog_table
。これは、次のように定義されます。
私のセットアップは次のとおりです。Windows7SP1、Oracle 11g
*私のbenchamrkingプロシージャは、各反復でtarget_tableの21k行を更新することを10回繰り返します。
oracle - 句読点を削除する
varchar2 の句読点を削除する方法を探しています。つまり、"Marian" から "Marian" を取得し、"Cernický" から "Cernicky" を取得したいということです。
sql - 文字列で単語を返す
varchar2データ型の2番目の単語を返し、何もない場合は空白にするにはどうすればよいですか?アイデアは、関数内で関数を使用することです。
oracle - タイムゾーン付きのタイムスタンプへのOracle varchar2
タイムゾーン付きのタイムスタンプを含む VARCHAR2 変数を DATE 変数に変換しようとしています。タイムゾーンなしでタイムスタンプを変換できますが、タイムゾーンのロジックを追加すると、「ORA-01821: 日付形式が認識されません」というメッセージが表示されます。以下のコードを参照してください。
sql - varchar2フィールドでlead()とlag()を使用するにはどうすればよいですか?
Oracle11g これまでのSQLFiddleでの作業
varchar2列でlead( )関数とlag()関数を使用しています。次のルールを使用して、目的の結果を生成したいと思います。
- lag_valがnullの場合、'('
- lag_valがset_aと同じ場合、'および'
- lag_val!= set_aの場合、'または'
- Lead_valがnullの場合、')'
nvl()を使用してnull値を変換すると、「無効な数値」が発生するため、比較できます。
必要な出力
string - Entity Framework & Oracle: VARCHAR2 > 1,999 文字を挿入できない
Oracle テーブルに 4,000 文字の VARCHAR2 フィールドを作成しました。Visual Studio 2010、.NET Framework 4、 ODAC 11.2 Release 4、および Oracle Developer Tools for Visual Studio (11.2.0.3.0)で LINQ to Entities を使用してフィールドに文字列値を挿入しています。1,999 文字を超える文字列値を挿入しようとすると、次の内部例外が発生します。
Oracle.DataAccess.Client.OracleException
ORA-00932: 一貫性のないデータ型: 予期される - NCLOB を取得しました
ただし、SQL Developerを使用すると、問題なく4,000文字の文字列値をフィールドに挿入できます。
XMLTYPE フィールドに保存するときに 2,000 文字の制限がある既知の ODAC バグ(ソース #2 ) がありますが、私は XMLTYPE フィールドに保存していません。GAC に Oracle.DataAccess 2.112.3.0 があり、前述の Oracle ソフトウェアのリリース 5 (11.2.0.3.20) に更新することを検討しましたが、「Oracle Developer Tools for Visual Studio」だけが更新されたように見えるコンポーネントです。はリリース 4 から更新されており、「Oracle Data Provider for .NET 4」が更新が必要なコンポーネントであると考えています。私の .NET プロジェクトでは、System.Data.Entity と System.Data.OracleClient はどちらもランタイム バージョン 4.0.30319 です。
とにかく、他の誰かがこのエラーに遭遇したかどうか、そしてもしそうなら、解決策が見つかったかどうか疑問に思っています. Google によると、XMLTYPE フィールドを操作しているときにのみこのエラーが発生しているとのことですが、VARCHAR2 フィールドを操作しているときにこのエラーが発生するのは私だけではないでしょうか?
(FWIW、上記のリンクにある Oracle フォーラム スレッドのユーザー「997340」としての私の投稿への応答を受け取ることも望んでいます。有用な応答を受け取った場合は、この点に関する知識を必ず共有します。)
編集:それが役立つ場合、以下は私のコードで失敗している2つのブロックです。違いがあるかどうかを確認するために、最初のブロックをトラブルシューティングするときに 2 番目のブロックを作成しました。文字列値が既に挿入されているかどうかを確認するとき (「if」ステートメント)、および実際に文字列値を挿入するとき (「AddObject」ステートメント) に例外が発生します。
1:
2:
4 月 3 日の更新:
上記の最初のコード ブロックの「if」ステートメントから、Oracle に送信されている SQL をトレースすることができました。ここにあります:
残念ながら、私が協力した DBA は「p_linq_0」パラメーターの値を提供してくれませんでしたが、前述のように、1,999 文字を超えると例外が発生します。(この SQL をトレースしたとき、4,000 文字の文字列をパラメーターとして渡しましたが、もちろん例外が発生しました。) DBA は、SQL Plus などの特定の SQL クライアントについて、2,000 文字を超える VARCHAR2 を処理できないことについても言及しました。 . 完全には従いませんでした。SQLを使用するかどうかさらに、SQL Developer、またはその他のツールを使用して、Oracle は引き続き 4,000 文字の VARCHAR2 フィールドを照会します。さらに、私のマジック ナンバーは 1,999 文字です。2,000文字ではありません。DBA は、パラメーターに使用できる文字数に制限があることを意味したのでしょうか? さらに重要なことは、SQL Developer でこの SQL を実行し、パラメーターに 4,000 文字の文字列を入力すると、完全に機能することです。そのため、LINQ to Entities を介して機能しない理由について、私はまだ完全に混乱しています。また、プログラムで次のコードを試して、「msg」変数に 4,000 文字の文字列を指定して同様のクエリを実行しましたが、これも完全に機能しました。
今のところ、LINQ to Entities に関連するため、ODAC がバグであることにまだ指を向けています...
oracle - Oracle PL/SQL でサイズが 4 mb のファイル全体を 1 つのメールで取得するのに助けが必要です
以下の PL/SQL プロシージャのコードはバイト サイズをチェックし、30000 バイトを超える場合はデータを繰り返し、
30000 バイト (30 kb) ごとにメールの添付ファイル (複数のメールで txt ファイル) を送信します。Oracle PL/SQL で 4 MB のサイズのファイル全体を 1 つのメールで取得する
必要があります。
lv_message_tab のデータ型は varchar2(32767) です。* Varchar2(32767)の代わりにCLOBデータ型を使用できますか? * はいの場合、方法を提案してください。
何百万も前もって感謝します!!!
コレクションテーブルとして入力を与えることでプロシージャを呼び出しています
手順
変数のデータをclob データ型pv_message
の変数に格納したいだけです。lv_message
lv_message := pv_message (つまり、コレクション データ型から CLOB 型へ) の格納方法。「to_clob()」関数を使用して型キャストしようとしましlv_message = to_clob(pv_message)
たが、うまくいきませんでした。
oracle - VarChar2 と Char の比較: Oracle の設定でこれを許可できますか?
同じことに対して2つの異なる結果が得られる理由を確認するための簡単な質問です。構造的にまったく同じように構築された 2 つのデータベースがあります。どちらにも、varchar2(10) と char(10) の間の比較を行うビューがあり、フィールドの長さは 7 (コース外の char の場合は +3 スペース) だけです。
もちろん、これは私たちの構造に何か問題がありますが、それは私の質問とは別のものです.
1 つのデータベースが比較 (varchar2=char) を実行でき、もう 1 つのデータベースが実行できない可能性があるのはなぜですか? これを許可できるOracle設定はありますか。
助けてくれてありがとう、Grts、Maarten