2015-08-17 2 views
0

Я создал пакет хуг нравится следующим образом: -параметр по умолчанию в процедуре оракула

create or replace package xyz 
is 

procedure abc(v_frst_param in VARCHAR2 default 'Y') 
IS 

BEGIN 

dbms_output.put_line(v_frst_param); 
-- CALLING another function 

update_table(p_frst_parm =>v_frst_param, 
p_second_param =>'2'); 


END; 

В DBMS_OUTPUT.PUT_LINE выход наступающем нуль, когда я не проходит какое-либо значение при вызове процедуры ABC. если я прошел по умолчанию, и я не passign какой-либо параметр не должен значение прийти, как Y в выводе

+0

Установили ли вы выход сервера? – MarioAna

+0

Да в выходе я получаю другие выходы, но не это конкретное значение –

+0

у вас есть соответствующий корпус пакета, созданный также? – Jared

ответ

0

Попробовать это

В основном зависит от того, как вы вызываете вашу процедуру - ABC(); или ABC; или ABC(NULL); или ABC(''); и способ объявления parameters.

Create or replace procedure ABC(v_frst_param IN VARCHAR2 Default 'Y') 
    AS 
    OUT_v_frst_param VARCHAR2(100); 
    BEGIN 
    OUT_v_frst_param := v_frst_param ; 
    dbms_output.put_line('The PROCEDURE OUTPUT is : ' || OUT_v_frst_param); 
    END; 

--Procedure created. 

BEGIN 
ABC(); --calling procedure 
END; 

The PROCEDURE OUTPUT is : Y  
Statement processed. 

Теперь, если вы обратитесь к процедуре, как:

BEGIN 
ABC; --calling procedure 
END; 

The PROCEDURE OUTPUT is : Y 
Statement processed. 

--passing `NULL`  
BEGIN 
ABC(NULL); 
END; 

The PROCEDURE OUTPUT is :   
Statement processed. 

-- Passing again '' 
BEGIN 
ABC(''); 
END; 

The PROCEDURE OUTPUT is :  
Statement processed. 

--passing text 
BEGIN 
ABC('hello world'); 
END; 

The PROCEDURE OUTPUT is : hello world  
Statement processed. 
1

Прежде всего, я думаю, что пакет будет недействительным, вы пытаетесь добавить тело для вашей функции в спецификации пакета. Однако сама идея хороша, и она должна работать, если все сделано правильно, например, создать пакет:

create or replace package xyz is 

    procedure abc(v_frst_param in varchar2 default 'Y'); 

    procedure abc(v_frst_param in varchar2 default 'Y', v_second_param in varchar2); 

end xyz; 

и пакет тела:

create or replace package body xyz is 

procedure abc(v_frst_param in varchar2 default 'Y') is 
    begin 
    dbms_output.put_line(v_frst_param); 
    end; 

procedure abc(v_frst_param in varchar2 default 'Y', v_second_param in varchar2) is 
    begin 
    dbms_output.put_line(v_frst_param || '/' || v_second_param); 
    end; 

end xyz; 

Тогда вы можете захотеть сделать вызов ваша процедура:

begin 
    xyz.abc; 
    xyz.abc(); -- This is the same thing as above 
    xyz.abc(v_second_param => 'Maybe'); 
end; 

Пожалуйста, обратите внимание, что если вы отправляете что-нибудь в качестве параметра для v_first_parameter к этой процедуре, она будет использовать значение, а не по умолчанию.

+1

Нет, параметры по умолчанию не должны быть объявлены последними. 'abc (a в varchar2 по умолчанию 'Y', b в varchar2)' совершенно законно и работает отлично, пока вы используете именованные параметры при вызове. –

+0

Ах, действительно, вы правы, спасибо, я исправлю ответ. Я бы воздержался от комментариев, но не могу это сделать. – Viorel

Смежные вопросы