Oracle 如何通过在CMD@echo,ORALCE-PL/SQL中执行存储过程来获取参数?

Oracle 如何通过在CMD@echo,ORALCE-PL/SQL中执行存储过程来获取参数?,oracle,plsql,cmd,Oracle,Plsql,Cmd,过程结构::Package.Procedure(在a中,在b中) @echo执行包。过程(“%a%”,?XX?)| sqlplus %用户ID%/%PASSWORD%@%SID% 我可以执行带参数或不带参数的过程。 我想知道我该如何处理OUT参数 ****它的内部是CMD,而不是SQLPLUS****一种方法是编写一块PL/SQL代码,如下所示: DECLARE var NUMBER; BEGIN Package.Procedure('%a%',var); dbms_

过程结构::Package.Procedure(在a中,在b中)


@echo执行包。过程(“%a%”,?XX?)| sqlplus %用户ID%/%PASSWORD%@%SID%


我可以执行带参数或不带参数的过程。 我想知道我该如何处理OUT参数


****它的内部是CMD,而不是SQLPLUS****

一种方法是编写一块PL/SQL代码,如下所示:

DECLARE
    var NUMBER;
BEGIN
    Package.Procedure('%a%',var);
    dbms_output.put_line(var);
END;

在SQLPlus命令提示符中,您可以编写如下内容

variable z NUMBER
BEGIN
    Package.Procedure('%a%', :z);
END;

You should get "Procedure executed successfully"

print z;
你应该得到价值

或者另一个

SET SERVEROUTPUT ON

DECLARE
    z NUMBER;
BEGIN
    Package.Procedure('%a%',z);
    dbms_output.put_line(z);
END;

只是执行的另一个变体。尝试从CMD执行整个块,我想这是可行的

SET AUTOPRINT ON;
var out_param VARCHAR2(100); -- Bind Variable
EXEC Package.Procedure('Input_param',:out_param);

----------------------------------FROM CMD--------------------------------------

C:\windows\system32>@ECHO DECLARE my_num NUMBER; AVROY.TEST_CMD(my_num);dbms_out
put.put_line(my_num); END; |sqlplus <username>/<password>@SID
打开自动打印;
var out_param VARCHAR2(100);——绑定变量
EXEC Package.Procedure('Input_param',:out_param);
----------------------------------来自CMD--------------------------------------
C:\windows\system32>@ECHO声明我的号码;AVROY.TEST_CMD(my_num);数据库管理系统
放置。放置线(我的编号);结束|sqlplus/@SID

您可以在SQL Plus中编写它,然后用/character终止它,或者将它保存在文本文件中,然后用SQL Plus启动它,使用sqlplus@file.txt我知道要用sqlplus编写它,我想知道CMD。感谢您希望在不使用任何Oracle客户端(如sqlplus、sql开发人员)的情况下调用Proc。应通过CMD?
声明z编号
没有声明绑定变量它声明了一个PL/SQL变量,因此您不能将其引用为
:z
,您将得到
SP2-0552:bind变量“z”未声明。
。Plz chck如果这有帮助。在CMD代码中,您从哪里获得输出?(dbms_out put.put_line(my_num);)用于此..您正在使用windows shell构建PL/SQL statement这一事实基本上是不相关的,因为它正在通过管道传输到SQL/Plus并在那里运行(windows shell无法解析SQL,也不知道您的数据库)。因此,任何可以在SQL/Plus中运行的代码都可以使用,因为您只需要回显它并通过管道将其传递给SQL客户机即可对其进行解析。感谢您的解释..那么,是否有任何方法仅使用cmd批处理文件来处理过程。。!!