4

これは、実行中の削除スクリプトのフォールバック スクリプトです。これは、挿入ステートメントを生成するために使用しているクエリです。

select 'insert into remark_element(ELEMENTID, 
                                   REMARKID, 
                                   VALUE, 
                                   POSITION, 
                                   INFO_TYPE, 
                                   SCRIPTID)
                           values('||elementid||',
                                  '||remarkid||',
                                '''||nvl(value,'null')||''',
                                  '||position||',
                                  '||nvl(info_type,null)||',
                                  '||nvl(scriptid,null)||''||')' 
                          from remark_element 
                          where elementid in(....

これはそのクエリの結果です:

insert into remark_element(ELEMENTID,
                           REMARKID, 
                           VALUE, 
                           POSITION, 
                           INFO_TYPE, 
                           SCRIPTID)     
                    values(29650520,
                           20263860,
                          '0/877-426-6251-A',
                           1,,);

これを実行すると、ORA-00936: 空の info_type フィールドと scriptid フィールドが原因で式が見つかりません。どちらも数値であり、NULL 値を許容できます。生成されたクエリが必要です

insert into remark_element(ELEMENTID, 
                           REMARKID, 
                           VALUE, 
                           POSITION, 
                           INFO_TYPE, 
                           SCRIPTID) 
                    values(29650520,
                           20263860,
                          '0/877-426-6251-A',
                           1,
                           null,
                           null);

info_type と scriptid が null の場合。nvl(info_type,'null') を実行しようとしましたが、ORA-01722: 数値フィールドに文字列を入力しようとしたための無効な数値が発生しました。info_typeまたはscriptidがnullの場合、これを操作して、ではなくnullとして返すにはどうすればよいですか

4

5 に答える 5

2

出力は最終的に文字列であるため、列を文字列にキャストするために使用して、両方のnvl引数を文字列にするだけです。to_char

nvl(to_char(info_type), 'null')
于 2015-10-27T01:26:41.820 に答える
0

これを試してください、私のために働いてください:

select 'insert into remark_element(ELEMENTID, REMARKID, VALUE, POSITION, INFO_TYPE, SCRIPTID) values('||elementid||','||remarkid||','''||nvl(value,'null')||''','||position||','||
nvl(info_type,'null')||','||nvl(scriptid,'null')||''||')' from remark_element where elementid = 29650520

クエリを実行しているときに Oracle がnullを検出すると、結果は何もありませんが、「null」を使用すると、文字列のように見なされます。

したがって、(info_type,null)for(info_type,'null')を引用符に置き換えます。

于 2015-10-27T02:13:30.940 に答える
0

クエリは次のようにする必要があります。

select 'insert into remark_element(ELEMENTID, 
                               REMARKID, 
                               VALUE, 
                               POSITION, 
                               INFO_TYPE, 
                               SCRIPTID)
                       values('||elementid||',
                              '||remarkid||',
                              '||nvl2(value,''''||value||'''','null')||',
                              '||position||',
                              '||nvl2(info_type,to_char(info_type), 'null')||',
                              '||nvl2(scriptid,to_char(scriptid), 'null')||')' 
                      from remark_element 
                      where elementid in(....
于 2015-10-27T07:26:34.833 に答える