タグ付けされた質問 「functions」

関数は指定された作業を実行し、通常はパラメーターを入力として受け取ります。データベースに関しては、これらはSQLまたはデータベースベンダーに固有の場合があります。

2
インデックスが存在しない場合は作成します
インデックスが存在しない場合にインデックスを追加できる機能に取り組んでいます。比較するインデックスのリストを取得できないという問題に直面しています。何かご意見は? これは、次のコードで解決される列作成の問題と同様の問題です:https : //stackoverflow.com/a/12603892/368511

2
テーブル値関数でテーブルを結合する方法は?
ユーザー定義関数があります: create function ut_FooFunc(@fooID bigint, @anotherParam tinyint) returns @tbl Table (Field1 int, Field2 varchar(100)) as begin -- blah blah end 次のように、これを別のテーブルに参加させたいと思います。 select f.ID, f.Desc, u.Field1, u.Field2 from Foo f join ut_FooFunc(f.ID, 1) u -- doesn't work where f.SomeCriterion = 1 言い換えると、1であるすべてのFooレコードについて、の入力に対してから返されるおよびの値とともに、およびSomeCriterionを表示する必要があります。Foo IDDescField1Field2ut_FooFuncFoo.ID これを行うための構文は何ですか?

1
ハロウィーンの保護を超えた機能をスケジュールすることには何か利点がありますか
SCHEMABINDING関数が更新計画で不要なスプールを回避できることはよく知られています。 テーブルに触れない(つまり、データにアクセスしない)単純なT-SQL UDFを使用している場合SCHEMABINDING、UDFの作成中にオプションを指定してください。これにより、UDFがスキーマバインドされ、クエリオプティマイザーがこれらのUDFに関連するクエリプランに対して不要なスプール演算子を生成しないようにします。 SCHEMABINDINGデータにアクセスしない場合でも、関数には他の利点がありますか?


2
計算列のスカラーUDFが並列処理を禁止しないようにする方法はありますか?
SQL ServerのScalar UDFの危険性について多くのことが書かれています。カジュアル検索では、大量の結果が返されます。 ただし、スカラーUDFが唯一のオプションである場所がいくつかあります。 例として:XMLを扱う場合:XQueryは計算列定義として使用できません。Microsoftによって文書化された1つのオプションは、Scalar UDFを使用してXQueryをScalar UDFにカプセル化し、それを計算列で使用することです。 これにはさまざまな効果があり、いくつかの回避策があります。 テーブルが照会されたときに行ごとに実行します テーブルに対するすべてのクエリを強制的にシリアルに実行します 関数をスキーマバインドし、計算列を永続化するか、インデックスを作成することで、行ごとの実行を回避できます。これらのメソッドはいずれも、スカラーUDFが参照されていない場合でも、テーブルにヒットするクエリの強制シリアル化を防ぐことはできません。 それを行う既知の方法はありますか?

1
すべての列レコードを小文字に変換します
PostgreSQL 9.1を使用していますが、ユーザーテーブルにlogin列があります。 ログイン名は大文字と小文字が区別されます。たとえば、Bob、MikE、johnです。これらすべてのレコードを小文字に変換したいと思います。どうやってやるの?


2
SQL Server 2014でLEN()関数がカーディナリティを過小評価するのはなぜですか?
文字列列と特定の長さの行をチェックする述語を持つテーブルがあります。SQL Server 2014では、チェックする長さに関係なく、1行の推定値が表示されます。実際には数千または数百万の行があり、SQL Serverはこのテーブルをネストされたループの外側に配置することを選択しているため、これは非常に貧弱な計画を生み出しています。 SQL Server 2012で31,622行を見積もる一方で、SQL Server 2014の1.0003のカーディナリティの見積もりについての説明はありますか?良い回避策はありますか? 問題の簡単な複製を次に示します。 -- Create a table with 1MM rows of dummy data CREATE TABLE #customers (cust_nbr VARCHAR(10) NOT NULL) GO INSERT INTO #customers WITH (TABLOCK) (cust_nbr) SELECT TOP 1000000 CONVERT(VARCHAR(10), ROW_NUMBER() OVER (ORDER BY (SELECT NULL))) AS cust_nbr FROM master..spt_values v1 CROSS …

1
選択を追加するときに自己参照スカラー関数のネストレベルを超えました
目的 自己参照関数のテスト例を作成しようとすると、あるバージョンが失敗し、別のバージョンが成功します。 唯一の違いはSELECT、関数本体に追加されることです。その結果、両方で異なる実行計画が作成されます。 機能する機能 CREATE FUNCTION dbo.test5(@i int) RETURNS INT AS BEGIN RETURN( SELECT TOP 1 CASE WHEN @i = 1 THEN 1 WHEN @i = 2 THEN 2 WHEN @i = 3 THEN dbo.test5(1) + dbo.test5(2) END ) END; 関数を呼び出す SELECT dbo.test5(3); 返品 (No column name) 3 機能しない機能 CREATE …

9
T-SQLを使用して、文字列が回文であるかどうかをテストします
私はT-SQLの初心者です。入力文字列が回文であるかどうかを判断します。回文がそうでない場合はoutput = 0、そうでない場合はoutput = 1です。私はまだ構文を理解しています。エラーメッセージも表示されません。T-SQLがどのように機能するかについてのより良い理解と知識を獲得し、より良くなるために、さまざまなソリューションとフィードバックを探しています-私はまだ学生です。 私が見ているように、鍵となるアイデアは、左端と右端の文字を互いに比較し、等しいかどうかを確認し、次に左から2番目の文字と最後から2番目の文字を比較することです。ループを実行します。文字が互いに等しい場合、続行します。最後に到達した場合は1を出力し、そうでない場合は0を出力します。 批判してください: CREATE function Palindrome( @String Char , @StringLength Int , @n Int , @Palindrome BIN , @StringLeftLength Int ) RETURNS Binary AS BEGIN SET @ n=1 SET @StringLength= Len(String) WHILE @StringLength - @n >1 IF Left(String,@n)=Right(String, @StringLength) SET @n =n+1 SET @StringLength =StringLength -1 …

3
テーブル値関数のアクセス許可を付与する方法
私はそれを正しくやっていますか...? 私はお金を返す関数を持っています... CREATE FUNCTION functionName( @a_principal money, @a_from_date datetime, @a_to_date datetime, @a_rate float ) RETURNS money AS BEGIN DECLARE @v_dint money set @v_dint = computation_here set @v_dint = round(@v_dint, 2) RETURN @v_dint END GO Grant execute on functionName to another_user Go これがiTVFに変換できるかどうか疑問に思っていますか? 私はこれを試しましたが、エラーが発生しました: CREATE FUNCTION functionName ( @a_principal money, @a_from_date …

3
PostgreSQLには、タイプセーフなfirst()集約関数がありますか?
完全な質問の書き直し First()集計関数を探しています。 ここで、ほとんど機能するものを見つけました。 CREATE OR REPLACE FUNCTION public.first_agg ( anyelement, anyelement ) RETURNS anyelement LANGUAGE sql IMMUTABLE STRICT AS $$ SELECT $1; $$; -- And then wrap an aggregate around it CREATE AGGREGATE public.first ( sfunc = public.first_agg, basetype = anyelement, stype = anyelement ); 問題は、varchar(n)列がfirst()関数を通過するときに、単純なvarchar(サイズなし)に変換されることです。関数でクエリをRETURNS SETOF anyelementとして返そうとすると、次のエラーが表示されます。 エラー:クエリの構造がSQL:42804関数結果の型と一致しません。 )RETURN …

1
SQL Server-ネストされた非決定的なビュースタック内の文字列のローカライズの処理
私がアクセスされる一部の非決定的関数参照しているビューに出くわしたデータベースプロファイリングしながら、毎分1000から2500回をするために、各このアプリケーションのプール内の接続を。SELECTビューからの単純な結果は、次の実行計画をもたらします。 これは、数か月ごとに1行または2行の変更が発生する可能性がある1000行未満のビューの複雑な計画のようです。しかし、次のその他の遵守事項により悪化します。 ネストされたビューは非決定的であるため、インデックスを作成できません 各ビューは複数UDFのを参照して文字列を作成します 各UDFにはUDF、ローカライズされた言語のISOコードを取得するためのネストされたsが含まれています スタック内のビューは、s から返された追加の文字列ビルダーを述語として使用していますUDFJOIN 各ビュースタックはテーブルとして扱われます。つまり、基礎となるテーブルに書き込むためにそれぞれにINSERT/ UPDATE/ DELETEトリガーがあります。 ビューのこれらのトリガーは、これらの文字列構築をより多く参照CURSORSするEXECストアドプロシージャを使用しますUDF。 これはかなり腐っているように見えますが、TSQLの経験は数年しかありません。それも良くなります! これは素晴らしいアイデアだと判断した開発者UDFは、スキーマ固有の文字列から返された文字列に基づいて、格納されている数百の文字列を翻訳できるように、すべてを実行したようです。 スタック内のビューの1つを次に示しますが、それらはすべて等しく劣っています。 CREATE VIEW [UserWKStringI18N] AS SELECT b.WKType, b.WKIndex , CASE WHEN ISNULL(il.I18NID, N'') = N'' THEN id.I18NString ELSE il.I18nString END AS WKString ,CASE WHEN ISNULL(il.I18NID, N'') = N'' THEN id.IETFLangCode ELSE il.IETFLangCode END AS IETFLangCode ,dbo.User3StringI18N_KeyValue(b.WKType, b.WKIndex, …

2
Function / ProcedureでのDML操作後にコミットが必要ですか?
function / procedureでinsert / delete / updateの後にcommitを書く必要があるかどうか知りたいのですが? 例: create or replace function test_fun return number is begin delete from a; return 0; end; または手順 create or replace procedure aud_clear_pro as begin delete from a; end; 削除後にコミットする必要がありますか? 次の状況を理解できません。 SQLウィンドウから関数/プロシージャを呼び出す場合、コミットが必要です しかし dbms_schedulerを使用して関数/手順をスケジュールし、ジョブを実行すると、deleteステートメントが自動的にコミットされます。 どうして?

1
この構文はどのように機能しますか?{fn CurDate()}または{fn Now()}など
最近、SQL Server 2005用に作成されたかなり古いストアドプロシージャを調べてきましたが、理解できないことがわかりました。何らかのタイプの関数呼び出しのようです。 サンプル: SELECT o.name, o.type_desc, o.create_date FROM sys.objects o WHERE o.create_date < {fn Now()} -1; これは、すべての行が表示されますsys.objects持ってcreate_date前から24時間前。 このクエリの実行プランを表示する{fn Now()}とgetdate()、データベースエンジンに置き換えられていることがわかります。 SELECT [o].[name],[o].[type_desc],[o].[create_date] FROM [sys].[objects] [o] WHERE [o].[create_date]<(getdate()-@1) 明らかに、を使用すること{fn Now()}は、よりもはるかに鈍いですGetDate()。文書化されていないので、私はペストのようなこの構文を避けます。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.