oracle - Oracle - 生成 Package.Procedure 调用
问题描述
大家早上好,您知道自动生成 Oracle package.procedure 调用的简单方法吗?
定义包后
Create Or Replace Package PKG1
As
Procedure PRC1
(
P_VAL1_I In NUMBER,
P_Return_Set_O Out Sys_Refcursor,
);
End;
我想通过脚本生成调用
DECLARE
var_P_RETURN_SET_O SYS_REFCURSOR;
BEGIN
PKG1.PRC1(P_VAL1_I => 0, P_Return_Set_O => var_P_RETURN_SET_O );
END;
当然,我稍后会替换输入参数。
有什么想法/建议吗?
解决方案
在这里,我自己的答案.. 并不难.. 只需运行一个构建过程调用的 pl/sql。
Declare
l_Package varchar2(255) :=upper('xxxxxxxxx');
l_Proc varchar2(255) :=upper('xxxxxxxxxxxx');
Begin
Dbms_Output.Put_Line('DECLARE');
For Var_Out In (
select ObjArg.Argument_Name,Data_type
FROM sys.user_objects UsrObj
Inner Join sys.user_arguments ObjArg On UsrObj.object_id= ObjArg.object_id
Where UsrObj.object_name = l_Package
And ObjArg.ObjecT_Name= l_Proc
AND UsrObj.object_type = 'PACKAGE'
And ObjArg.In_Out='OUT'
)
Loop
Dbms_Output.Put_Line('L_'||Var_Out.Argument_Name ||' '||Var_Out.Data_type||';');
end Loop;
Dbms_Output.Put_Line('BEGIN');
Dbms_Output.Put_Line(l_Package||'.'||l_Proc);
Dbms_Output.Put_Line('(');
For PArams In (
select ObjArg.Argument_Name,Data_type,ObjArg.In_Out
FROM sys.user_objects UsrObj
Inner Join sys.user_arguments ObjArg On UsrObj.object_id= ObjArg.object_id
Where UsrObj.object_name = l_Package
And ObjArg.ObjecT_Name= l_Proc
AND UsrObj.object_type = 'PACKAGE'
)
Loop
IF PArams.In_Out='OUT' Then
Dbms_Output.Put_Line(PArams.Argument_Name || '=> L_'||PArams.Argument_Name);
ELSE
Dbms_Output.Put_Line(PArams.Argument_Name || '=> xxx');
End If;
end Loop;
Dbms_Output.Put_Line(');');
Dbms_Output.Put_Line('END');
End;
结果 ..
DECLARE
L_P_RETURN_SET_O REF CURSOR;
L_P_EXECUTION_STATUS_O NUMBER;
BEGIN
PKG.PROC
(
P_PARAM_I=> xxx
P_RETURN_SET_O=> L_P_RETURN_SET_O
);
END;
代码并不完美..但它有效......
推荐阅读
- javascript - 根据单数或复数添加后缀
- excel - With函数VBA中的多对象表达式
- javascript - 用于验证字符串的正则表达式,确保单词仅由一个特殊符号分隔
- c++ - 初始化用户定义类的指针向量
- wpf - 自定义控件在xaml中使用时如何设置DP值?(声明时)
- sql - 在透视 xml 后将 xmltype 解析为表
- flutter - 找不到提供程序 - Flutter
- power-automate - 使用 MS Flow 在 Microsoft Teams 上未呈现自适应卡片图像
- apache-spark - 为什么使用 Summarizer 的流式查询失败并显示“要求失败:没有向此汇总器添加任何内容”?
- flask - 无法在 PyCharm 中安装 Flask