Javaコードからストアド・プロシージャに渡されるコンマ区切りの文字列があります。例oracle pl sqlの文字列を分割する
管理、役割、ユーザー
については
今、私はこの文字列を分割し、2番目の質問がされているOracle PL/SQLの配列
にそれを移入しますか、この機能はSQLサーバーで実行すると有効になりますか? SQL側で
Javaコードからストアド・プロシージャに渡されるコンマ区切りの文字列があります。例oracle pl sqlの文字列を分割する
管理、役割、ユーザー
については
今、私はこの文字列を分割し、2番目の質問がされているOracle PL/SQLの配列
にそれを移入しますか、この機能はSQLサーバーで実行すると有効になりますか? SQL側で
は、T-SQLにはネイティブの分割機能はありませんが、同じby Erland Sommarskog here
を行うCLR機能の良い例は、それはOracleの機能は、SQLに有効であるとは考えにくいのですがありますSQL文は通常、あるフレーバから別のフレーバへの変換が必要です。ただし、クライアントがodbcや.netなどの共通ドライバを使用している場合は、この機能をクライアントに移行して両方のデータベースで動作させることができます。使用の
function str2tbl (p_str in varchar2,p_delim in varchar2 default '.') return myTableType
is
l_str long default p_str || p_delim;
l_n number;
l_data myTableType := myTabletype();
begin
loop
l_n := instr(l_str, p_delim);
exit when (nvl(l_n,0) = 0);
l_data.extend;
l_data(l_data.count) := ltrim(rtrim(substr(l_str,1,l_n-1)));
l_str := substr(l_str, l_n+length(p_delim));
end loop;
return l_data;
end str2tbl;
例:
TYPE myTableType is table of varchar2(100);
v_array mytabletype;
v_array := str2tbl (string, ',');
クエリ以下で試してくださいなります
--Creating function
CREATE FUNCTION GetSplittedData(@dataToSplit VARCHAR(500))
RETURNS VARCHAR(500)
AS
BEGIN
RETURN (''''+REPLACE(@dataToSplit, ',', ''',''')+'''')
END
--Calling function with data
SELECT DBO.GetSplittedData('admin,role,user')
更新:あなたが関数を記述することができますが、これはSQL Serverに
に応じています文字列を解析するために各データベースで新しい値が追加されるとパーサのルールに違反する危険性がありますe(あなたの場合、「Admin、Super」をユーザーとして追加することを決めたと想像してください。これを行うより良い方法は、この目的のために設計された構造を使用することです。オラクルで
は、次の操作を行うことができます:
create type Varchar10List as table of varchar(10);
create function YourFunction (pRoles Varchar10List) as
...
しかしこれはSQL Serverの動作しないでしょう。 SQL Serverには表形式のパラメータがありますが、これは似ていますが、まだJavaではサポートされていません。
もっと一般的にやりたければ、非常に単純なXMLとしてリストを渡すことができます。現時点でほとんどのデータベースサーバーにはXMLパーサーが統合されているため、Oracleを使用しているかSQL Serverを使用していても、XMLをより使いやすいものに変換するのは簡単です。
これは悪いDBデザインのような匂いがします。たぶん、データの正規化について考えるべきでしょう –