2016-12-18 24 views
0

良い日。私が持っている機能:Oracle DB:プロシージャ内で関数結果を変数に格納する方法

create function get_n(search tt.pp%type) 
    return number 
    is rc number; 
begin 
    select count(*) 
    into rc 
    from tt 
    where tt.pp=search; 

    return (rc); 
end; 
/

をして

variable qwe number; 

begin 
    select get_n('sample') 
    into :qwe 
    from dual; 
end; 

print qwe; 

だから、それが正常に動作していますように私はなり得ることができます。しかし、部品によって:私は他の実行時にprintと行をすることはできません(PLS-00103:シンボル "PRINT"が発生しました...)。それは本当に変です。

私は無名ブロック内の機能に起因し、それを印刷取得しよう:

declare 
    qwe number; 
begin 
    select get_n('sample') 
    into :qwe 
    from dual; 
    dbms_output.put_line(qwe); 
exception 
    when others 
    then dbms_output.put_line(sqlerrm); 
end; 
/

そして、それは何を印刷していません。どうして?

+0

をそしてうん、私のことができちょうど ':='関数の値ですが、なぜこれは機能しませんか? – Evgeniy175

+0

はるかにシンプルな '' qwe:= get_n( 'sample') 'を使って何が問題になったのですか? –

+0

@a_horse_with_no_nameはすべてこの点で素晴​​らしいですが、この場合に何が間違っているか理解したいだけです – Evgeniy175

答えて

4

問題は:です。次のコードは動作するはずです:

declare 
    qwe number; 
begin 
    select get_n('sample') 
    into qwe 
    from dual; 
    dbms_output.put_line(qwe); 
exception 
    when others 
    then dbms_output.put_line(sqlerrm); 
end; 
/

:は、PL/SQLブロック内ではない変数バインドされる必要がある変数を意味します。
そして、あなたは/を逃している最初のブロックの場合には、コンパイラを引き起こすものPL/SQLブロックは、PL/SQLないSQLPLUSスクリプトの一部としてprintを読み取った後:

variable qwe number; 

begin 
    select get_n('sample') 
    into :qwe 
    from dual; 
end; 
/

print qwe; 
関連する問題