sql >> データベース >  >> RDS >> Oracle

SQL Developerスクリプトの出力は、sys_refcursorの幅を切り捨てます

    質問に直接答えていない-columnを使用する以外に、クエリから関数を呼び出すときに動作が異なる理由や、動作を変更する方法がわかりません。 少し単純化するためにここでエイリアスを使用して、幅を設定するコマンド:

    set lines 250
    column rc format a250
    select my_function(input1,input2,input3) as rc from dual;
    

    ただし、関数を別の方法で呼び出すことで、必要な出力を取得することもできます。変数と匿名ブロック(またはexecute 省略形として):

    variable rc refcursor;
    exec :rc := MY_FUNCTION(input1,input2,input3);
    print rc
    

    まあ、ほとんどあなたがそれを望むように。出力の最初の行は、関数/パラメーターのリストではなく変数名です。ただし、カーソル列は折り返されていません:

    anonymous block completed
    RC
    ---------------------------------------------------------------------------
    COLUMN1                   COLUMN2 COLUMN3    COLUMN4    COLUMN5    
    ------------------------- ------- ---------- ---------- ---------- 
    18-NOV-14                 text    some_data1 some_data2 some_data3 
    

    (ワークシートではなく)コードエディタから関数を実行することもできます。これにより、匿名ブロックが生成されます。実行矢印をクリックする(またはcontrolキーを押しながらF10キーを押す)と、次のようなダイアログが表示されます。

    実行すると、メインウィンドウの下部に[出力変数]タブが表示され、カーソル出力がグリッドに表示されます。

    select my_function(...) from dualを実行するとグリッドビューも表示されます 。カーソルは通常の「クエリ結果」ウィンドウに入りますが、非常にわかりやすい形式ではなく、次のように表示されます。

    {<COLUMN1=19-NOV-14,COLUMN2=text,COLUMN3=some_data1,COLUMN4=some_data2,COLUMN5=some_data3>,}
    

    ただし、値をダブルクリックすると、列の右端に黄色の鉛筆記号が表示され、それをクリックすると、そのカーソルが独自のグリッドに表示されます。

    個人的にはprintが好きです スクリプト出力のオプションですが、とにかくグリッドディスプレイを使用することはめったにありません。




    1. テーブル内の異なる行を更新および削除するときにデッドロックが発生する可能性はありますか?

    2. SQLServerで単一列にチェック制約を作成する方法-SQLServer/TSQLチュートリアルパート83

    3. PostgreSQLトリガーを使用して変更(SQLステートメントと行の変更)を保存するにはどうすればよいですか?

    4. なぜデータベースにビューを作成するのですか?