問題タブ [create-function]
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.
postgresql - PostgreSQL: CREATE FUNCTION は主キーによって 1 つの行を返します
次の関数を書きました。
クエリ
SELECT sessions_get(1)
を実行して、ユーザー ID 1 のセッション ID を取得できるようにしたいと考えています。また、返される列の名前をid
.それは可能ですか?または、クエリは次のようにする必要があります
SELECT * FROM sessions_get(1)
か? その場合は、 と書くだけで短くなりますSELECT sessions_get(1) as id
。どちらが良いですか?SETOF
この関数は常に 0 行または 1 行を返すことがわかっているため、削除できますか?user_id
テーブルの主キーであるため、これを知っていsessions
ます。
split - DB2 SQL: 複数の行で再帰的 CTE を使用する Join Table 関数 (文字列の分割)
IBM DB2 V10 では、次の関数を作成しました。この関数には、再帰的な共通テーブル式が含まれています。たとえば'abc,def,ghi'
、テキスト文字列を 3 行のテーブルに分割し'abc'
、'def'
と'ghi'
.
基本的に、この関数は単一の文字列に対して期待どおりに機能します。
次のテーブルを生成します。
ただし、結合する行が複数あるテーブルがあるとすぐに、DB2 は次の値を返しますERROR [42997] [IBM][DB2] SQL0270N Function not supported (Reason code = "").
。これは、複数の select ステートメントをコメントアウトせずに次のクエリを実行すると、このエラーが返されることを意味します。ただし、各行自体ではエラーは発生しません。
IBM Knowledge Center では、そのようなテーブル関数を複数の行で結合できない理由を見つけることができませんでした。エラー SQL0270N (機能がサポートされていません) は、理由コードがなければあまり役に立ちません。
次の理由コードで示される制限に違反しているため、ステートメントを処理できません。
複数の行を持つサブクエリまたはテーブルでこの関数を結合したいと考えています。ただし、有用な理由コードがなければ、何が問題なのかわかりません。複数の行を結合するときに何がうまくいかないのか、誰かが考えていますか?
mysql - MySQL 値を含む関数ステートメントを作成し、データ型 decimal を返す
これはMySQLの私のコードです。与えられた在庫と各アイテムの価格からアイテムの値を計算するステートメントを作成する必要があります -> 在庫×価格。itemvalue が負の場合は、0 に設定する必要があります。
これが今のところ機能していないことはわかっていますが、MySQL で関数を操作したことはありません。申し訳ありませんが、うまくいけば、皆さんが私を助けてくれます。
関数のシグネチャは次のとおりです。
itemvalue(inventory int UNSIGNED, price decimal(8,2))
ありがとう
php - MySQL 関数の作成中の問題
次のように、整数の有名な AlphaID 表現を作成する PHP 関数があります。
たとえば、PHP_MAX_INT定数 (2147483647) によって提供される最大整数をエンコードすると、cwuCBb が返されます。
しかし、アプリケーション全体では少し遅すぎると思ったので、MYSQL 関数を作成しようとしました。理論的には、クエリ中にデータの準備ができたら、PHP でそのような変換を行うことでパフォーマンスを浪費することはありません。
MySQL のマニュアルはあまり親切ではありませんが、あちこち検索すると、次のようになりました。
しかし、使用している MySQL マネージャー ( DBNinja ) を介して実行すると、明らかに何も起こりません。クエリを実行すると、影響を受ける行が 0と表示され、これが期待される出力かどうかわかりません。
正しいかどうかに関係なく、クエリで使用しようとしたとき、関数はどちらの方法でも機能しませんでした。
table.ENCODE_ALPHAIDが存在しないというエラーを最初に受け取りました。その後、実際に、使用しようとしていたデータベースとは別のデータベースで関数を作成したことに気付きました。
しかし、適切なデータベースで再度作成しましたが、同じエラーが発生しました。
だからここに質問があります:
- 私は何を間違えましたか?このようなことをしようとするのはこれが初めてで、正確にはわかりません
- 私の PHP コードの実装は有効な MySQL 対応物ですか? 何か見逃しましたか?
- この関数を「グローバル」にすることはできますか? つまり、必要なデータベースで利用できますか? 私が取り組んでいるアプリケーションでは、関連する 2 つのサブシステムを分離しておくために、2 つのデータベースを作成しました。
更新しました
どうやら、関数が作成されないという問題は DBNinja 側にあるようです。なぜなら、MySQL コンソールで直接ステートメントを実行したためです。同じ出力ステータスの0 行が影響を受けましたが、ステートメントで関数を効果的に使用できたので、関数は結局作成されました。
ただし、ルーチン自体に何か問題があるため、テストしたところ、結果の文字列は...「1つ先」でした。
たとえば、次の PHP コードを実行するとします。
これはbaaacを生成しますが、MySQL 関数はbaaadを返します。これは、整数3の AlphaID 表現になります。
これは間違っているだけでなく、最大 2147483647 に達したときに使用される INT 型をオーバーフローさせる可能性もあると思います