【问题标题】:Oracle: How to call a PL/SQL procedure having 10 IN attributes and 2 OUT attributes?Oracle:如何调用具有 10 个 IN 属性和 2 个 OUT 属性的 PL/SQL 过程?
【发布时间】:2021-09-11 13:46:40
【问题描述】:

第一次调用程序,我的程序名称如下:

PROCEDURE add_cine(
P_User_Name In Varchar2,
p_c_number IN VARCHAR2, 
P_C_Name In Varchar2,
P_C_Id In Varchar2, 
P_Ot In Varchar2, 
P_It In Varchar2, 
p_se IN DATE,
P_Ee In Date,
p_pr IN VARCHAR2,
p_tr IN VARCHAR2,
x_eec OUT NOCOPY VARCHAR2, 
x_et OUT NOCOPY VARCHAR2
);

我正在使用 oracleclient 来调用这个过程

当我这样称呼它时:

SQL> exec ADD_cine('xxsihh', '197200_90.27014-156154', '1214','197200_127014-156154', '1', '197200: IPS 1 Term 12mth GB', null, null, '197200', '90.1')
ERROR at line 1:
ORA-06550: line 1, column 216:
PLS-00363: expression '197200' cannot be used as an assignment target

10 个参数有 IN,两个有 OUT,但在调用时我只输入 IN。

我尝试了其他方法,但都一样。知道我是否没有正确传递参数吗?

通过java代码我总是得到:

PLS-00201: identifier 'ADD_CINE' must be declared
ORA-06550: line 1, column 7:
PL/SQL: Statement ignored

我也试过

DECLARE 
errcode VARCHAR2; 
errmessage VARCHAR2; 
BEGIN 
    ADD_cine('xxsihh', '197200_90.27014-156154', '1214','197200_127014-156154', '1', '197200: IPS 1 Term 12mth GB', null, null, '197200', '90.1',errcode,errcode)
END;

但它不是由 oracle 客户端选择的。它继续期待输入

【问题讨论】:

  • 你的“也试过”有errcode,errcode;也就是说,您对两个输出使用相同的变量。你不能这样做,两个输出必须是不同的变量......errcode, errmessage

标签: java oracle plsql


【解决方案1】:

您必须声明 2 个 OUT 参数并在调用过程时实际使用它们

DECLARE
   out_1  VARCHAR2 (20);
   out_2  VARCHAR2 (20);
BEGIN
   ADD_cine (p_user_name  => 'xxsihh',
             p_c_number   => '197200_90.27014-156154',
             p_c_name     => '1214',
             p_c_id       => '197200_127014-156154',
             p_ot         => '1',
             p_it         => '197200: IPS 1 Term 12mth GB',
             p_se         => NULL,
             p_ee         => NULL,
             p_pr         => '197200',
             p_tr         => '90.1',
             x_eec        => out_1,           --> this
             x_et         => out_2);          --> and this
END;
/

【讨论】:

  • 感谢您的确认。我首先在 oracle 客户端中尝试了它,但它没有执行相同的操作(附上它所显示的行为的屏幕截图,即没有执行。你有相同的信息吗?
  • 您看到的那些数字... 在最后一个 END; 之后,键入一个斜杠 /,然后按 ENTER。
猜你喜欢
  • 2021-04-04
  • 2023-03-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-02-22
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多