2017-04-05 14 views
0

OracleのXMLELEMENT関数を使用してXMLを作成しようとしていますが、クエリをテストしていますが、XMLELEMENT関数を追加するとすぐにデータが表示されません。ここで私は何をやっているされていますXMLELEMENTは、Oracle Sql Developerの出力ウィンドウにデータを表示しません

ノーマル問合せ:

SELECT NAME from sysadm.USER where ID = '121'; 
**Output** - Sahil 

XMLクエリ:

SET SERVEROUTPUT ON 
DECLARE 
nametag xmltype; 
BEGIN 
    SELECT XMLELEMENT("USERNAME", NAME) into nametag from sysadm.USER where ID = '121'; 
END; 

**Output** - anonymous block completed 

任意の提案私が間違って何をやっているの?

+0

'xmlelement'を追加しただけでなく、匿名のPL/SQLブロックにラップしました。実際にその理由がありますか? –

答えて

2

あなたが実際にあなたが行うことができた、あなたの変数の値を表示する必要があります少なくとも限り生成された文字列が32K未満であるよう

SET SERVEROUTPUT ON 
DECLARE 
nametag xmltype; 
BEGIN 
    SELECT XMLELEMENT("USERNAME", NAME) into nametag from sysadm.USER where ID = '121'; 
    DBMS_OUTPUT.PUT_LINE(nametag.getstringval()); 
END; 

。しかし、コードを呼び出す他の誰かがサーバ出力を有効にしているかどうかを一般的に制御できないので、dbms_outputを使用しては、実際にデバッグする以外は避けるべきです。

また、バインド変数、例えばを使用することができます。

VAR result CLOB; 

DECLARE 
nametag xmltype; 
BEGIN 
    SELECT XMLELEMENT("USERNAME", NAME) into nametag from sysadm.USER where ID = '121'; 
    :result := nametag.getclobval(); 
END; 
/

print result 

あなたはしかし、全くのPL/SQLブロックを使用する必要はありません - あなただけ行うことができます。

SELECT XMLELEMENT("USERNAME", NAME) from sysadm.USER where ID = '121'; 

は、必要に応じて追加.getclobval()または.getstringval()を入力して出力を変更します。生成されたXMLの長さによっては、ワークシートにすべてを表示するために、より高い値にset longを設定する必要があります。スクリプトではなくステートメントとして実行すると、クエリ結果出力グリッドは(XMLTYPE)と表示されますが、ダブルクリックして値を表示するか、右クリックして[単一レコードビュー]を選択して実際のコンテンツを表示できます。

+0

詳細については、Alexに感謝します。これは私が見ているものです。 OracleがSQL Serverのように動作しない理由を知り、その結果を出力ウィンドウに表示するだけでした。とにかく感謝します:) –

+0

SQL Server * 8-ではないので[12cは少し類似していますが](https://docs.oracle.com/database/121/LNPLS/release_changes.htm#LNPLS118)を追加しました。 –

関連する問題