問題タブ [user-defined-functions]

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.

0 投票する
1 に答える
1864 参照

sql - SQL Select ステートメントの関数

上記のような質問があります。fn1 の出力である列があります。その出力を他の関数 fn2 に使用したかったのです。その場合、fn2 で col3 を直接使用できないため、以下のように 2 つの関数とビューを分割しました。私は正しい方向に進んでいるのか、私がしていることは正しいのか、それとももっと良い方法があるのか​​ 知りたいと思っていました. View1 のコメント部分で、関数 fn1 が 2 回呼び出されますか? またはSQL Serverが最適化を担当しますか?

0 投票する
2 に答える
2108 参照

sql - MySQLでのUDFパフォーマンス

クエリにSELECT句またはWHERE句のUDFへの呼び出しが含まれていると、MySQLクエリの実行時間が急激に低下することに気づきました。問題のUDFは、ローカルテーブルにクエリを実行してスカラー値を返します。したがって、UDFは算術式を実行するだけでなく、相関サブクエリとして機能します。UDFを削除し、相関サブクエリ、より複雑な結合などで書き換えるだけで、パフォーマンスの問題を修正しました。

MySQLの経験しかない場合は、これを現実として受け入れ、UDFの使用を調整して先に進むと思います。しかし、MySQLを使用する前は、SQLServerで5年以上働いていました。私は、はるかに大きなデータセットを処理し、スカラーとテーブル値の両方のユーザー定義関数に非常に大きく依存する課金システムを構築しました。これらのUDFは、クエリも実行しました(つまり、算術演算だけではありません)。SQL Serverでユーザー定義関数を使用するときに、この種のパフォーマンスの低下は発生しませんでした。

私が疑問に思っているのは、SQL ServerとMySQLの内部を十分に理解していて、2つのシステムでのUDFのこのパフォーマンスの違いの原因に関する私の現在の理論を確認または説明できる人がいるかどうかです。私の理論では、SQLServerのオプティマイザーはUDFをMySQLとは異なる方法で評価します。おそらく、MySQLでテーブルエンジンが分離されているためですか?あるいは、SQL ServerでのUDFの使用がより普及していて、MySQLエンジンのオプティマイザーがまだ進化していないのではないでしょうか。私が考えているのは、SQL Serverオプティマイザーが含まれているUDFを(可能な場合は)周囲のクエリの一部として扱い、残りのクエリと一緒に最適化することです。たぶん私はここでマークから外れていますが、SQLServerでUDFを使用することでこの種のパフォーマンスが低下するのを見たことがありません。

他の人がこの問題に当てることができるどんな光でもありがたいです。

0 投票する
1 に答える
654 参照

sql - ストアドプロシージャを使用したメタプログラミング?

これは、直接的な質問と議論のポイントの両方になります。最初に直接質問します。

ストアドプロシージャは別のストアドプロシージャを動的に作成できますか?(個人的にはSQL Server 2008に興味がありますが、より幅広い議論のために、SQL Server 2008は開いたままにしておきます)

今私が尋ねている理由に。簡単に言うと(詳細は他の場所で読むことができます)、SQLServerのユーザー定義スカラー関数はせいぜいパフォーマンスのボトルネックです。コードベースでクエリ全体の速度を3〜4倍遅くする使用法を見てきましたが、私が読んだところによると、S-UDFのローカルな影響は10倍以上になる可能性があります

ただし、UDFは、抽象化レベルの向上、面倒なボイラープレートの削減、ロジックルールの集中化などに最適です。ほとんどの場合、UDFは、インラインで簡単に拡張できる単純な式に要約されますが、そうではありません(私は本当に非クエリ関数(文字列操作など)のみを考えます。これについては、MSからの賛同を得て、将来のリリースで対処されるバグレポートを見てきました。しかし今のところ、私たちは(IMHO)壊れた実装に耐えなければなりません。

回避策の1つは、代わりにテーブル値UDFを使用することです。ただし、これらは、常に処理したくない方法でクライアントコードを複雑にします(特に、UDFが式の結果を計算する場合)。

したがって、私のクレイジーなアイデアは、最初は、Cプリプロセッサディレクティブを使用してプロシージャを記述し、それをプリプロセッサに渡してからRDBMSに送信することでした。これは機能する可能性がありますが、独自の問題があります。

それが私の次のクレイジーなアイデアにつながりました。それは、DB自体に「マクロ」を定義し、マクロを含む未処理のSPを含む文字列を受け入れ、マクロをインラインで展開してからRDMSに送信するマスタープロシージャを用意することでした。 。これはSPが得意なことではありませんが、最初にこれを実行できると仮定すると、機能する可能性があると思います。したがって、私の最初の質問です。

しかし、これで質問への道を説明したので、他のアイデアのためにそれを開いたままにしておきたいと思います。これらの方針に沿って考えてきたのは私だけではないと確信しています。おそらく、サードパーティのソリューションがすでに存在しているのでしょうか。私のグーグルはまだあまり現れていません。また、楽しいディスカッショントピックになると思いました。

[編集]

私の研究で見つけたこのブログ投稿は、私が見ているのと同じ問題について説明しています。私やブログのポスターが、オーバーヘッドにつながる間違ったことを誰かが指摘してくれたら嬉しいです。

また、S-UDFでWITH SCHEMABINDINGを使用していることも付け加えておきますが、それは私に何の利点も与えていないようです。

0 投票する
2 に答える
18022 参照

sql-server - ユーザー定義関数でのエラー処理

SQL Server 2005 で CLR 以外のユーザー定義関数を記述したいと考えています。この関数は入力文字列を受け取り、出力文字列を返します。入力文字列が無効な場合は、呼び出し元にエラーを示したいと思います。

私が最初に考えたのは、RAISERROR を使用して例外を発生させることでした。ただし、SQL Server では UDF 内でこれを行うことはできません (ただし、CLR ベースの UDF では例外を発生させることができます)。

私の最後の手段は、入力値がエラーの場合、関数から NULL (またはその他のエラー インジケーター値) を返すことです。ただし、次のように、このオプションは好きではありません。

  1. 発信者に有用な情報を提供しません
  2. 有効な入力に対して NULL を返すことはできません (エラー コードとして使用されているため)。

SQL Server でエラーが発生したときに関数を停止する呼び出し元に優しい方法はありますか?

0 投票する
1 に答える
586 参照

java - DB2 AS400 Java 関数は常に同じ値を返します

Java で AS/400 上の DB2 にユーザー定義関数を書いていますが、最も奇妙なことが起こります.
関数を変更しているときでも、関数をドロップして再度作成しているときでも、関数から常に同じ結果が得られます。 NOT DETERMINISTIC を指定した場合でも..
そのような動作に遭遇した人はいますか?

0 投票する
5 に答える
2838 参照

performance - どちらの側にもワイルドカードを使用できる Oracle 10g での文字列の一致

テスト ケースのスキーマとデータは次のとおりです。

今のところ mask 列を無視し、specialmatch 関数が存在すると仮定します。

生成する必要があります:

次、

生成する必要があります:

次、

生成する必要があります:

次、

生成する必要があります:

特別なマッチ機能を作成する方法についてのアイデアはありますか?

私の単純なアプローチは、特別な文字列比較 udf (疑似コード) を記述することです。

また、一致を行う前に、マスクを val にオーバーレイする必要があります。

例: val='1_345678', mask=' _ _' => 1_34567_ で、12345678 と 19345679 には一致しますが、92345678 には一致しません。

しかし、インデックスやオプティマイザーなどを活用するためにこれを行うにはどうすればよいでしょうか...

0 投票する
5 に答える
13228 参照

excel - Excel のユーザー定義関数と速度の問題

ほとんどすべての UDF を使用する Excel モデルがあります。たとえば、120 列と 400 以上の行があります。計算は垂直に行われ、次に水平に行われます --- つまり、最初に列 1 のすべての計算が行われ、次に列 1 の最終的な出力が列 2 の入力になります。各列で、約 6 つまたは 7 つの UDF を呼び出します他の UDF を呼び出します。多くの場合、UDF は配列を出力します。

各 UDF への入力は、いくつかの変数、一部の範囲変数、一部の double です。範囲変数は、その内容がアクセスされる前に、内部で配列に変換されます。

私の問題は次のとおりです。UDF なしで Excel モデルを構築でき、シミュレーションを実行すると、すべての計算を X 時間で完了することができます。UDF を使用すると、シミュレーション時間が 3 倍以上になります。(明らかな質問に答えるには、はい、UDF を使用する必要があります。モデルに小さな変更を加えたい場合 (別の資産タイプ (金融モデル) を追加するなど) は、モデルを作り直すのにほぼ 1 日かかります) UDF を使用しない場合は、新しい法的/財務構造に適合しますが、UDF を使用すると、異なる財務構造に対応するのに約 20 分かかります。)

いずれにせよ、画面の更新をオフにしました。関数にコピーと貼り付けはありません。バリアント型の使用は最小限で、すべてのデータは 1 つのシートに含まれています。内容を取得する前に、すべての範囲型変数を配列に変換します。 .

VBAコード/Excelファイルをより高速に実行するために、より高速なコンピューターまたは同等のものを入手する以外に、他に何ができますか? これについてさらに説明が必要な場合はお知らせください。

ありがとう!

0 投票する
1 に答える
1045 参照

sql - Firebird UDF 作成の失敗

再作成する必要がある firebird データベースがあります。外部 UDF 関数が含まれています。IB Expert を使用して、DB 構造の SQL ダンプを作成しました。

ただし、クエリを実行するとエラーが発生します。

無効なトークン。
動的 SQL エラー。
SQL エラー コード = -104。
不明なトークン - 行 1、列 27。
「LPAD」。

Windows で Firebird 2.1.1 を使用しています。何が問題なのか誰か知っていますか?

0 投票する
3 に答える
7751 参照

c# - セルの数式から Excel 2007 で C# で記述されたメソッドを呼び出す

Excel 2007 を使用しています。別のバイナリで C# コードを記述しています。コードは、静的クラスとクラスの静的メソッドを使用します。VSTO Excel ワークシート プロジェクトに DLL への参照があります。これを機能させるには、何を追加または変更する必要がありますか?

私のC#コードは次のようになります:

次のような数式を Excel セルに入力できるようにしたいと考えています。

または何でも。

これを見たことがありますが、Excel 2003 の非静的クラス用のようです。統合が改善されていないとは信じられません。

これに関する多くの StackOverflow の質問を見てきました。それらはネイティブ統合を提供しているようには見えず (多くの人は「X オープン ソース ライブラリを使用する」と言っています)、不吉なことに、多くは OP に受け入れられていません。「COMオブジェクトにしてVBAから呼び出す」というのは求めていません。

だから私は探しています:

  • エクセル2007
  • C# DLL のコード
  • Excel セルから UDF として呼び出す
  • ネイティブ統合

別の StackOverflow リンクを次に示します。このリンクでは、2 人のレスポンダーが次のように述べています。

  • 私の知る限り、VSTO で UDF を直接作成することはできません。
  • VSTO は、Excel UDF の作成をサポートしていません。オートメーション アドインは .Net で作成でき、Microsoft が承認した方法のようです。

これは 2009 年 6 月からの質問です。これは本当ですか? 2009 年には、.NET コンポーネントを COM サーバーとして公開して、Excel 用の呼び出し可能な UDF を取得する必要がありますか?

0 投票する
3 に答える
1724 参照

sql-server - カスタムソート機能 - SQL Serverの

SQL Server 2005 に、バージョン番号を並べ替えたい文字列として格納する列があります。この列をソートする方法を見つけることができませんでしたが、ある種のカスタム関数または比較アルゴリズムであると推測しています。

どこから始めればよいか、誰かが私を正しい方向に向けることができますか? 私は間違ったものをグーグルで検索している可能性があります。

乾杯

トリス