タグ付けされた質問 「stored-procedures」

データベースマネージャーにインストールされた呼び出し可能なコードは、それを呼び出すことができるAPIを公開します。通常、ネイティブクエリ言語で記述されますが、一部のDBMSプラットフォームは他の言語もサポートしています。

2
ストアドプロシージャでのトランザクション
単一のトランザクションでUPDATEとINSERTを実行する必要があります。そのコードはそれ自体で問題なく機能しますが、簡単に呼び出して必要なパラメーターを渡すことができるようにしたいと思います。このトランザクションをストアドプロシージャにネストしようとすると、多くの構文エラーが発生します。 次のコードをカプセル化して簡単に呼び出せるようにするにはどうすればよいですか? BEGIN TRANSACTION AssignUserToTicket GO DECLARE @updateAuthor varchar(100) DECLARE @assignedUser varchar(100) DECLARE @ticketID bigint SET @updateAuthor = 'user1' SET @assignedUser = 'user2' SET @ticketID = 123456 UPDATE tblTicket SET ticketAssignedUserSamAccountName = @assignedUser WHERE (ticketID = @ticketID); INSERT INTO [dbo].[tblTicketUpdate] ([ticketID] ,[updateDetail] ,[updateDateTime] ,[userSamAccountName] ,[activity]) VALUES (@ticketID, 'Assigned ticket to …

1
ストアドプロシージャの結果をテーブル変数に挿入する
テーブル変数に値を格納するストアドプロシージャがあります。これらの値を選択し、プロシージャが呼び出されたときにそれらを返します。 これらの戻り値を別のテーブル変数に設定しようとしていますが、わかりません。 ストアドプロシージャ ALTER PROCEDURE [dbo].[GetOrSetDomainId] @DomainName varchar(50), @DomainUrl varchar(50) AS BEGIN DECLARE @DomainId bigint; DECLARE @NumberOfRwos bigint; DECLARE @DomainHistory TABLE ( DomainId bigint, HasHistory bit, ServerOnline bit, DatabaseOnline bit, ServerPerformance bigint, DatabasePerformance bigint, SoldTickets bigint ) SELECT @NumberOfRwos = COUNT(Id) FROM DomainData WHERE DomainName = @DomainName OR DomainUrl = …

1
PostgreSQL 8.4でトリガー関数を実行するために必要な権限は何ですか?
PostgreSQL 8.4でトリガー関数を実行するために必要な権限は何ですか? ロールに設定された権限は、トリガー機能を実行する上で重要ではないようです。トリガー関数を実行するために必要な特権はEXECUTE特権であるが、トリガー関数を呼び出すトリガーを起動するアクションを実行する実際のロールではなく、テーブルの所有者にとってある日を見たことがあります。 その点を説明するドキュメント部分が見つかりません、何か助けはありますか?

1
エラー:セットを受け入れることができないコンテキストで呼び出されたset_valued関数。どんな内容ですか?
私はubuntu 12.04でPostgresql 9.1を使用しています。 私の質問へのクレイグの回答に触発されたsetofタイプまたはsetofレコードの連結私はreturn query、setof recordこのplpgsql関数に、、およびシリーズジェネレーターを使用するとうまくいくと思いました: create or replace function compute_all_pair_by_craig(id_obj bigint) returns setof record as $$ begin return query select o.id, generate_series(0,o.value) from m_obj as o; end; $$ language plpgsql; 実行中にエラーが発生します: ERROR: set_valued function called in context that cannot accept a set なにが問題ですか ?Craigとは逆に、関数に返すように指示しますsetof record。 私はCraigとまったく同じように機能する何かを実現できます。つまり、型create type pair_id_value as …

3
MS SQLデータベースで相互に関連するストアドプロシージャの巨大なWebを文書化する:どのツールまたは形式ですか?
これは「1000ページの本を読む」よりも短い答えの質問であるといいのですが、それが本当の状況なら、私をそれに当てはめてください。 私は本物のDBAではありません。私はDBAが必要だと気づいているソフトウェア開発者ですが、私が働いている店にはDBAがいません。ただし、いくつかのコアストアドプロシージャを含むMS SQLデータベースの設計は、大きな混乱です。ストアドプロシージャは遅く、バグがあると思われますが、どのように機能することが予想されるのかさえわからないため、修正方法もわかりません。 最初に、すべての機能がどのように機能するかを文書化し、ユニットテストを開始して、ストアドプロシージャが実際に機能することを証明する一連のユニットテストを構築することにしました。彼らが実行するロジックは、私たちのアプリケーションの重要な部分です。つまり、それは当社の主要製品の「宝石」であり、その動作方法は完全に文書化されていません。 私は、プロのDBAが相互に呼び出すストアドプロシージャの巨大なWebを理解するために、既存の、または必要に応じて自分で作成することを期待している可能性がある特定の技術ドキュメントを探しています。 大きなストアドプロシージャを文書化するための通常の形式は何ですか?各Inパラメータの期待値の説明(つまり、「前提条件」、「事後条件」、つまりブールパラメータの場合、オンまたはオフにすると何が変わるかなど) 通常、それをどのように文書化しますか?SQLコメントのみ?目的に固有の外部ツールですか?外部の「ドキュメント」?MS SQL Management Studio以外にSQLツールはありませんが、環境の理解、文書化、およびテストを改善するツールがあるかどうか疑問に思っています。多分それが私の質問をするより良い方法です。混乱を解決するには、どのツールが必要ですか? 私たちの目標は、次のことができるようにすることです。 A.生成されたドキュメント、または環境に追加したツールを使用して、プロシージャがどのように機能するかを理解し、ストアドプロシージャの単体テストカバレッジを作成できるようにします。 B.これらの複雑なストアドプロシージャをそれぞれ適切に呼び出す方法をクライアントアプリ開発者に示す。 C.ストアドプロシージャの単体テスト。

5
SQL Serverストアドプロシージャはデータ結果をキャッシュしますか?
これは友人から聞いたことがありますが、これが本当かどうかは調査していません。 実行されたクエリのデータ結果がキャッシュに保存されるのは本当ですか? つまり、次のようなストアドプロシージャがあるとします。 SELECT * FROM USERLIST ...結果(この場合はユーザーのリスト)がキャッシュに保存されるのは本当ですか? また、私がこれらを持っている場合: SELECT * FROM USERLIST WHERE user="user" SELECT * FROM USERLIST WHERE user="userzzz" (user / userzzzがパラメーターとして渡されます)、データベースキャッシュに2つの異なる結果を格納することは正しいですか。 そうは思いませんが、専門家の確認をお願いします!

1
PLS-00306エラー:間違った引数を見つける方法は?
PLS-00306: 'string'へのコールで引数の数またはタイプが間違っています 原因:このエラーは、名前付きサブプログラムの呼び出しが、そのサブプログラム名の宣言と一致しない場合に発生します。サブプログラム名のスペルが間違っているか、パラメータのデータ型が間違っているか、宣言に誤りがあるか、宣言がブロック構造に正しく配置されていない可能性があります。たとえば、このエラーは、組み込み平方根関数SQRTが、スペルの間違った名前または誤ったデータ型のパラメーターで呼び出された場合に発生します。 処置:サブプログラム名の綴りと宣言を確認してください。また、呼び出しが正しいこと、パラメータが正しいデータ型であること、組み込み関数でない場合は、宣言がブロック構造に正しく配置されていることを確認してください。 どうすれば間違った引数をすばやく特定できますか? 何十ものパラメータを持つストアドプロシージャがあります。使用された手順と定義された手順の違いを確認する簡単な方法はありますか?行ごとにチェックしたくない。

3
SQL 2005ストアドプロシージャにエラー処理を追加する最良の方法は何ですか?
ストアドプロシージャを十分に堅牢にし、非常に適切にスケーリングし、エラー処理を含めるための良い方法は何ですか? さらに、ストアドプロシージャで複数のエラーシナリオを処理し、呼び出し元のアプリに意味のあるエラー情報を返すインテリジェントなフィードバックシステムを使用するための最良の方法は何ですか?

2
SQL Server機能を使用して、番号で区別されたストアドプロシージャのグループを作成する人はいますか?
質問は、このmsdnドキュメントの数値パラメーターを参照しています そうでない場合は、SQL Serverで複数のストアドプロシージャを番号で区別して作成し、1回のドロップでドロップできます。 create procedure dbo.stored_proc1 as select 1 go create procedure dbo.stored_proc1;2 as select 2 go exec stored_proc1 -- returns 1 go exec stored_proc1;2 -- returns 2 go drop stored_proc1 -- drops both go この機能は誰かが何か役に立つものに使用しているのか、それとも単なる歴史的な好奇心なのか。

2
ストアドプロシージャを使用して別のデータベースに接続する方法
外部データベースからいくつかのデータを取得し、それを別のデータベースで計算する必要があります。ストアドプロシージャから外部データベースに接続することはできますか?みんなありがとう。 PS。 Oracleを使用していて、両方のデータベースが同じサーバーにあります。

3
SQL Server Insert Into-切り捨てエラーの原因となっている列を特定する方法
テーブルに650のフィールドを挿入するストアドプロシージャがあります。挿入は、切り捨てエラーで失敗します。 簡単です INSERT INTO SELECT (a bunch of fields) FROM (a bunch of tables) 以下はエラーメッセージです。 メッセージ8152、レベル16、状態14、プロシージャDSP_Procedure、行1075文字列またはバイナリデータは切り捨てられます。 切り捨てエラーの原因となっているフィールドを簡単に特定できる方法はありますか? テーブルに挿入される選択ステートメントに650のフィールドがあるため、どのフィールドが切り捨てエラーの原因であるかを正確に特定することが困難です。 一度に100個のフィールドのみを挿入するように、一度にフィールドのブロックをコメント化し、少なくとも100個のフィールドのグループに絞り込むことができるまで、SP 6または7の異なる時間を実行できると思います。切り捨てエラーの原因となっているフィールドが含まれます。 またはSELECT INTO、新しいテーブルを作成して、SPに挿入しようとしているターゲットテーブルのデータ長とテーブルのデータ長を比較して、どのフィールドに予想より長いフィールド長が含まれているかを確認できると考えています。 .. SQL Server 2014を使用しています。 より簡単な代替手段はありますか?

4
ストアドプロシージャを使用して日付範囲の毎日の行を作成する方法
特定の日付範囲の毎日のテーブルに行を作成するストアドプロシージャを作成したいと思います。ストアドプロシージャは、2つの入力(ユーザーが希望する日付範囲の開始日と終了日)を受け入れます。 それで、私がそのようなテーブルを持っているとしましょう: SELECT Day, Currency FROM ConversionTable DayはDateTimeであり、Currencyは単なる整数です。 話を簡単にするために、これらの挿入された行ごとにCurrency列を常に1にしたいとします。したがって、誰かが「2017年3月5日」を開始日として入力し、「2017年4月11日」を終了日として入力した場合、次の行を作成します。 2017-03-05 00:00:00, 1 2017-03-06 00:00:00, 1 ... 2017-04-11 00:00:00, 1 これを行うためにストアドプロシージャをコーディングする最良の方法は何ですか?私のテスト環境ではSQL Server 2008 R2を使用していますが、実際の環境ではSQL Server 2012を使用しているため、このタスクを容易にする新しい機能が2012年に導入された場合、テストマシンをアップグレードできます。

2
MySQLでのトリガーvsストアドプロシージャのパフォーマンス
ここのDBA.StackExchangeの投稿(レコードのリビジョン番号を維持するためのトリガーのベストプラクティスは何ですか?)は、MySQLのパフォーマンスに関する興味深い質問(少なくとも、私にとって興味深い)を生み出しました。 コンテキストは、更新される行ごとにテーブルにレコードを挿入することです。行が更新される前に、以前の値を保存してから、列の1つ(「バージョン」列)を増分します。 これをトリガー内で実行すると、うまく機能します。MySQLの場合、トリガーは行ごとに行われるため、簡単に解決できます。現在テーブルにあるデータを選択し、それをロギングテーブルに挿入して、新しいデータの「バージョン」列を更新します。 ただし、このロジックをストアドプロシージャに移動することは可能です。その場合、挿入を実行してから、テーブルの「バージョン」列をインクリメントします。全体がベースに設定されます。 それで、この挿入を実行することになると、セットベースのストアドプロシージャアプローチまたはトリガーベースのアプローチを使用する方がパフォーマンスが良くなりますか? この質問はMySQLに関するものです(行ごとのトリガーがあるため)。ただし、他の行ごとのトリガーDBMSにも当てはまります。

5
スキーマの変更後に壊れたストアドプロシージャを検出するにはどうすればよいですか?
データベースの中央のテーブルを変更しました。sp_dependsは文字通り数百の結果を返します。変更後、これらのストアドプロシージャの一部がコンパイルされないのではないかと心配しています。 1つのストアドプロシージャを確認するのは簡単です(変更スクリプトを再実行して、操作が成功するかどうかを確認するだけです)が、100以上のプロシージャでそれを行うのは少し面倒です。 このようなスクリプトを使用してデータベースのすべてのオブジェクトを再コンパイルできることはわかっていますが、実際の操作は、ストアドプロシージャが次に実行されたときにすぐにではなく、実行されるため、私の場合は適切ではないようです。 また、すべてのストアドプロシージャを完全に削除し、データベースをソース管理システムで再同期できると考えていましたが、このオプションは実行可能ではありますが、あまりエレガントではありません。これを行うより良い方法はありますか? SQLServer 2008 R2を使用していますが、データベーススクリプトはVS 2008データベースプロジェクトに保存されています。 明確にするために、私はコードをテストするためにこのアプローチだけに頼るべきだと主張しているのではありません。C#とまったく同じように、コードを作成するときに他の依存ファイルの構文エラーを瞬時に検出します(その後、通常は数桁遅いユニットテストなどの他の戦略を使用してテストします)、SQLの依存関係を検出することは理にかなっていると思います通常は完了するまでに数時間かかる完全な機能テストを実行する必要がなく、数秒でエラーが発生します。

3
誰が手順を作成しましたか?(SQL Server 2008 R2)
SQL Server 2008で特定の調達を作成したユーザーを一覧表示する方法はありますか? ではこのSOのリンクがいくつかの答えですが、6yrsから前に。 名前と日付を書いてから手順の作成を始めるのが最善の策であることはわかっていますが、私が作業しているところはわかりません。 これを行う方法がない場合、このタスクはトリガーで実行できますか? そしておまけの質問。これはdbaの仕事ですか?誰がそれを作ったのか知りたい? どうもありがとうございました。

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