2012-01-09 37 views
4

次のスクリプトをテーブルに挿入していますが、いくつか問題があります。PL/SQL Developerで を挿入する際の問題

declare 
    v_xslt9 varchar2(32767) := '<?xml version="1.0"?> <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:output method="html" encoding="UTF-8" indent="yes"/> <xsl:template name="Template"> <xsl:text>Kære </xsl:text> <xsl:value-of select="/nameValueMap/entry[string=''FIRST_NAME'']/string[2]"/> <xsl:text>&nbsp;</xsl:text> <xsl:value-of select="/nameValueMap/entry[string=''LAST_NAME'']/string[2]"/></xsl:template> </xsl:stylesheet>' 
begin 
    insert into XSLT values ('','Note',sysdate,v_xslt9,sysdate,'T','') 
end; 

関心の一部は以下の

<xsl:text>&nbsp;</xsl:text> 

私はPL/SQL Developerを使用して、それが実体として

&nbsp; 

を認識し、私の上に私がスクリプトを実行していますです私はそれにしたい値を入力する必要があります。私が望むのは、XSL内のシンプルな空白で、ファーストとラストネームが区切られます。私は次のリンクからすべての提案を試みました:orafaq - 私はちょうどそれを働かせることができません。挿入しようとすると失敗するか、データを抽出すると失敗します。

XSLに空白を挿入する簡単な方法はありますか?

+1

PL/SQL Developerのように、SQL * Plusによく似た「スクリプト変数」と見えます。スクリプトを実行する前に 'SET DEFINE OFF'を実行してみてください(少なくともSQL * Plusの問題を修正してください) –

+0

はすでにこれを試しています:( – Herter

+1

PL/SQL Developerマニュアルを調べる必要があります... –

答えて

6

SQLウィンドウの代わりにcommand windowを使用して、PL/SQL Developerでスクリプトを実行します。あるタイプのウィンドウを別のタイプに変換するには、ウィンドウ内の任意の場所を右クリックして、 "Change Window to" => "Command Window"を選択します。

次に、SQL * Plusのようにスクリプトを実行します。この場合は、最初の行にSET DEFINE OFFと入力します。 PL/SQL Developerのマニュアルから

+0

これもうまくいくようですが、スクリプトを実行しないので「宣言」ビットを使用することはできません。 – Herter

+1

(SQL * Plusのように) 'BEGIN ... END'ブロックを終了するには、新しい空行にスラッシュ'/'を使用します。 –

+1

downvote non-portability –

2
<xsl:text>&&nbsp;</xsl:text> 

あなたが置換変数として を解釈すべきではないSQLテキストにアンパサンドを使用したい場合は、代わりに二重のアンパサンド を使用しています。

+0

私はこれを試して、それが動作します。しかし、私はこれがPL/SQLでのみ動作すると推測していますか? - 問題は、SQLを実行するために他の人にSQLを渡す必要があるということです。SQLをどのように実行するのかも知りません - 可能な場合、「普遍的な」ソリューションが必要です。 – Herter

+0

はい、これはPL/SQL Developerでのみ機能します。私が知る限り、普遍的な解決策はありません。あらゆる環境には、これを困難にする独自の癖があります。このため、多くの人が何かを実行するために常にSQL * Plusを使用しています。これは常に最適な環境ではありませんが、常に利用可能です。 –

2

これを試してみてください:

'<xsl:text>'||chr(38)||'nbsp;</xsl:text>' 

'<xsl:text>'||unistr('\00A0')||'</xsl:text>' 

このunistr('\00A0')機能は、Unicode NO-BREAK SPACE

それとも、あなたはエンティティ自体をしたい場合、あなたはこれを試すことができますを返しますchr(38)は、入力のプロンプトを表示せずにリテラルのアンパサンドを返します。

4

使用

'<xsl:text>'||'&'||'nbsp;</xsl:text>' 

それはどこでも、永遠の問題を解決し、だけでなく、あなたのためになります - 将来のすべてのユーザーのために。

記号を単離してください

関連する問題