1
データベース内のすべてのプロシージャをフェッチして(コメントを使用して)ドキュメントを生成し、すべての「内」および「外」パラメータをリストするこのプロシージャを作成しました。SQL Anywhere条件付き選択文
私が直面している問題は、私が構築しているアプリケーションの中で、私はこれらの手順の1つを選択したいからです(ユーザーがこのリストの項目の1つをクリックしたときにその詳細を出力します)これはオプションではありません処理するため)ここで
は、元のコード(***** Pを無視する - これは意図的に隠されている(ただし、手順で使用されることはありません - そのロギング用)です):
ALTER PROCEDURE "USER"."NetDefineProcs"
/* DOC
Everything between the DOC tags are used to generate the user document.
*/
(in "p*****" char(20), in "pSearchTerm" long varchar, in "pSelectOne" char(1) default null)
result("proccessName" long varchar, "Doc" long varchar, "paramName" long varchar,"paramIO" long varchar,"paramDefault" long varchar,"paramType" long varchar)
begin
SELECT "proc_name" as "proccessName",
(SELECT substr(source, charindex('/* DOC', source)+6, charindex('*/', source) - charindex('/* DOC', source)-6) FROM "sys"."sysprocedure" where "proc_name" = "proccessName" AND charindex('/* DOC', source) > 0) as "Doc",
"LIST"("parm_name" order by "parm_type" asc,"parm_id" asc) as "paramName",
"LIST"("parm_type" order by "parm_type" asc,"parm_id" asc) as "paramIO",
"LIST"("isnull"("default",'null') order by "parm_type" asc,"parm_id" asc) as "paramDefault",
"LIST"("isnull"("domain_name",'null') order by "parm_type" asc,"parm_id" asc) as "paramType"
from "sys"."sysprocedure" as "pr" key join "SYS"."SYSPROCPARM" as "pa" key join "SYS"."SYSDOMAIN"
-- Below code requires sybase 16 - temporary version 11 friendly version above
-- "LIST"("isnull"("base_type_str",'null') order by "parm_type" asc,"parm_id" asc) as "paramType"
-- from "sys"."sysprocedure" as "pr" key join "SYS"."SYSPROCPARM" as "pa" --where pr.proc_name = o.proc_name ;
-- WHERE "proc_name" like 'net%' AND "proc_name" like '%' + pSearchTerm + '%'
WHERE "proc_name" = pSearchTerm OR "proc_name" like 'net%' AND "proc_name" like '%' + pSearchTerm + '%'
group by "proc_name"
order by 1 asc
end
上記のコードは、すべてをフェッチするために問題なく動作しますが、ここには1つしかフェッチしようとしなかったコード
ALTER PROCEDURE "USER"."NetDefineProcs"
/* DOC
Everything between the DOC tags are used to generate the user document.
*/
(in "p*****" char(20), char(20), in "pSearchTerm" long varchar, in "pSelectOne" char(1) default null)
result("proccessName" long varchar, "Doc" long varchar, "paramName" long varchar,"paramIO" long varchar,"paramDefault" long varchar,"paramType" long varchar)
begin
CASE
WHEN pSelectOne = '1' THEN SELECT FIRST "proc_name" as "proccessName",
ELSE SELECT "proc_name" as "proccessName",
END
(SELECT substr(source, charindex('/* DOC', source)+6, charindex('*/', source) - charindex('/* DOC', source)-6) FROM "sys"."sysprocedure" where "proc_name" = "proccessName" AND charindex('/* DOC', source) > 0) as "Doc",
"LIST"("parm_name" order by "parm_type" asc,"parm_id" asc) as "paramName",
"LIST"("parm_type" order by "parm_type" asc,"parm_id" asc) as "paramIO",
"LIST"("isnull"("default",'null') order by "parm_type" asc,"parm_id" asc) as "paramDefault",
"LIST"("isnull"("domain_name",'null') order by "parm_type" asc,"parm_id" asc) as "paramType"
from "sys"."sysprocedure" as "pr" key join "SYS"."SYSPROCPARM" as "pa" key join "SYS"."SYSDOMAIN"
-- Below code requires sybase 16 - temporary version 11 friendly version above
-- "LIST"("isnull"("base_type_str",'null') order by "parm_type" asc,"parm_id" asc) as "paramType"
-- from "sys"."sysprocedure" as "pr" key join "SYS"."SYSPROCPARM" as "pa" --where pr.proc_name = o.proc_name ;
-- WHERE "proc_name" like 'net%' AND "proc_name" like '%' + pSearchTerm + '%'
WHERE "proc_name" = pSearchTerm OR "proc_name" like 'net%' AND "proc_name" like '%' + pSearchTerm + '%'
group by "proc_name"
order by 1 asc
end
私は、後ろに '、'がある選択ステートメントのために構文エラーがあることを知っていますが、私はそれが厄介になっていないと達成しようとしているものに似た何かを持つことができる方法はありますか?
アプリケーションレイヤーから適切なストアドプロシージャをプログラムで選択できない理由はありますか? –
データベースを介して選択されている場合は、そのノードが好きです(nodejsで、私が行っているように学習しています!) – Gaza
解決済みです。私の答えは以下です – Gaza