2016-06-16 3 views
0

Я пытаюсь вставить данные в один из моих таблиц.Не удается вставить пустую строку в таблицу oracle

insert into t_transaction_query_log 
    (log_id, 
    posting_id, 
    fee_id, 
    fee_status, 
    fee_type, 
    pay_mode, 
    accounting_date, 
    policy_id, 
    money_id, 
    finish_time, 
    source_type, 
    fee_amount, 
    cr_seg, 
    dr_seg, 
    product_id' || v_insert_str_cr_seg || 
        v_insert_str_dr_seg || ')  
    select s_transaction_query_log__lg_id.nextval, 
      tg.je_posting_id, 
      tg.fee_id, 
      tg.fee_status, 
      tg.fee_type, 
      60, 
      tg.accounting_date, 
      tg.policy_id, 
      tg.currency_id, 
      trunc(sysdate, 
       ''dd''), 
      2, 
      tg.fee_amount,' ||v_str_cr_seg 
        || ',' || v_str_dr_seg || ', 
      tg.product_id' || v_insert_str_cr_seg || 
        v_insert_str_dr_seg || ' 
     from t_ri_fee_gl tg 
    where tg.posted = ''Y'' 

я объявил v_str_cr_seg, v_str_dr_seg, как пустые строки т.е. v_str_dr_seg VARCHAR (50) = '';

перед выполнением этого запроса я могу добавить некоторые значения этих двух строк , но в случае, если нет никаких изменений в этих строках из декларации я получаю вычисляемый запрос как

insert into t_transaction_query_log 
    (log_id, 
    posting_id, 
    fee_id, 
    fee_status, 
    fee_type, 
    pay_mode, 
    accounting_date, 
    policy_id, 
    money_id, 
    finish_time, 
    source_type, 
    fee_amount, 
    cr_seg, 
    dr_seg, 
    product_id)  
    select s_transaction_query_log__lg_id.nextval, 
      tg.je_posting_id, 
      tg.fee_id, 
      tg.fee_status, 
      tg.fee_type, 
      60, 
      tg.accounting_date, 
      tg.policy_id, 
      tg.currency_id, 
      trunc(sysdate, 
       'dd'), 
      2, 
      tg.fee_amount, , , 
      tg.product_id 
     from t_ri_fee_gl tg 
    where tg.posted = 'Y' 

, который в повернуть результаты в отсутствие ошибки выражения. я попытался с помощью NVL функцию

nvl(v_str_cr_seg, '') and `nvl(v_str_cr_seg, null)` 

, но до сих пор я получаю ту же ошибку

как я могу вставить даже если v_str_cr_seg и v_str_dr_seg являются неизменными т.е. пустые строки ''

ответ

0

Ora DB: пустая строка = нуль enter link description here

Примечание: Oracle Database с В настоящее время обрабатывается значение символа с нулевой нулевой длиной. Однако в будущих выпусках это не может продолжаться, и Oracle рекомендует не обрабатывать пустые строки так же, как и нули.

0

Если это инструкция вставки в середине PL/SQL-процедуры, то вы не будете связывать конкатенацию. Он предпочел бы выглядеть следующим образом

 tg.fee_amount, v_str_cr_seg, v_str_dr_seg 

Но что-то из вашего вопроса, говорит мне, что вы составляете строку, которую вы хотите execute immediate.

В этом случае вы должны убедиться, что вы даете цитаты:

 tg.fee_amount,''' ||v_str_cr_seg 
       || ''',''' || v_str_dr_seg || ''', 
     tg.product_id''' || v_insert_str_cr_seg || 
       v_insert_str_dr_seg || ''' 

Вы должны избежать одинарные кавычки (') с двумя кавычками в ряд ('')

Но если ваш строки уже приходят с котировками вокруг него, если нет нулевого значения, вы можете работать с nvl таким образом

 tg.fee_amount,' ||nvl(v_str_cr_seg,'''''') 
       || ',' || nvl(v_str_dr_seg,'''''') || ', 
+0

Да, я сочиняю эту строку для использования с немедленным выполнением –

+0

Тогда это должно сработать. Вы должны убедиться, что у вас нет ',,,', но ''', '', '''. Вы также можете иметь «null, null, null». Возможно, вы подготовили 'v_str_cr_seg' и т. Д. Перед этим утверждением. – hol

Смежные вопросы