oracle—有没有一种方法可以将默认参数添加到具有输入/输出参数的sql过程中?

m0rkklqb  于 2021-08-09  发布在  Java
关注(0)|答案(2)|浏览(328)

我有这个密码:

set serveroutput on;

CREATE OR REPLACE PROCEDURE myProc(
            id IN NUMBER, 
            optional_txt IN VARCHAR2 DEFAULT NULL, 
            random_pct OUT NUMBER
            )
    IS BEGIN
        random_pct := 101;      
    END myProc;

我只想使用如下所示的必需输入参数(id)调用此过程:

myProc(id, random_pct);

但是我得到这个错误: PLS-00306: wrong number or types of arguments in call to 'myProc' 如果我删除output参数,它可以正常工作,如下所示:

set serveroutput on;

CREATE OR REPLACE PROCEDURE myProc(
            pn_random_id IN NUMBER, 
            pn_optional_txt IN VARCHAR2 DEFAULT NULL
            )
    IS BEGIN
        dbms_output.put_line('Proc created.');
    END myProc;

(我这样称呼):

myProc(id);

如果我也需要输出参数,我如何使这项工作?

64jmpszr

64jmpszr1#

一个函数而不是一个过程是更好的解决方案。但您可以使用原始过程,仅使用这两个参数进行调用。但是您需要更改对命名参数的调用,而不是位置参数。

create or replace 
procedure myproc(
          id            in number 
        , optional_txt  in varchar2 default null 
        , random_pct   out number
        )
is 
begin
    random_pct := 101+id;      
end myProc;

declare 
   res  number;
begin
   myproc ( id         => 1
          , random_pct => res
          ); 
   dbms_output.put_line('res=' || to_char(res));
end;    

or even

declare 
   res  number;
begin
   myproc ( random_pct => res
          , id         => 2
          ); 
   dbms_output.put_line('res=' || to_char(res));
end;
kknvjkwl

kknvjkwl2#

创建函数而不是过程

CREATE OR REPLACE function myfunction(
            pn_random_id IN NUMBER, 
            pn_optional_txt IN VARCHAR2 DEFAULT NULL
            ) return NUMBER
    IS BEGIN
        dbms_output.put_line('Proc created.');
      return  1; -- return value you need
    END myProc;

比你能说的还多

declare
  v_result number;
begin
  v_result := myfunction(1);
end;
/

相关问题