2016-01-25 6 views
-2

Я пытаюсь использовать белый большой SQL запрос, как это:Попробуйте использовать большую SQL-запрос

insert into R7810TEST 
    (select 1111111 , 111111 , 1111111 ,'ORG' ,R401.ZIHUI_BAAL_POLISA ,8990 ,'ID' ,R401.ZIHUI_M_RASHI , R401.M_POLISA ,R440.M_SOCHEN , 201507 ,'ORG' , R401.ZIHUI_BAAL_POLISA ,'RTP' , 'CUR' , '1', '*' ,0 ,10000.00 ,0.00 , 0.00 , 0.00, 0.00, 0.00 , 0.00,0.00, 0.00 , r430.hf_oved_tagmulim_45 ,r430.hf_mavid_tagmulim , r430.hf_mavid_pizuim_mukar , 0.00, r430.hf_mavid_chelef, r430.hf_oved_shonot, r430.hf_mavid_shonot , r430.hf_oved_tagmulim_47 ,'MNG', 0.00 , 0.00 ,0.00 ,0.00 , '*' , to_date ('20150701', 'yyyymmdd'), R401.ZIHUI_BAAL_POLISA, r400.sug_polisa, to_date ('20150701', 'yyyymmdd'),'CHI', '12' , 0, 0 ,'0', to_date ('19000101', 'yyyymmdd') 
from r400 R400 ,r401 R401 ,r430 r430 ,r440 r440 
where r400.m_polisa = r401.m_polisa 
and r401.m_polisa = r430.m_polisa 
and r430.m_polisa= r440.m_polisa 
and r401.tr_rishum in (select max(aa.tr_rishum) from r401 aa where aa.m_polisa = r401.m_polisa) 
and r430.tr_rishum in (select max(aa.tr_rishum) from r430 aa where aa.m_polisa = r430.m_polisa) 
and r440.tr_rishum in (select max(aa.tr_rishum) from r440 aa where aa.m_polisa = r440.m_polisa) 
and r401.status_rashi = 10 
--and r401.status_rashi in (30,35) 
----and r401.status_rashi in (90) 
--and r401.status_rashi = 20 
and r400.sug_polisa in ('1','3','5','7') 
and r400.sug_hishtatfut <>0 
and r400.sug_hazmada <>0 
and r400.m_polisa IN (XXXXX)); 

И я получаю исключение из SQL, я использую Oracle и VBA с помощью Excel, я думаю, что это слишком большую строку так это не работает, и sql получает часть запроса. Что я могу сделать с тем, как использовать этот запрос в коде vba?

+1

Вы должны сообщить нам, какую ошибку вы получаете. Этот запрос далеко не слишком велик. –

+0

Удалите круглые скобки, «вставьте в R7810TEST select ...». – jarlh

+0

: Описание: «ORA-00907: отсутствующая правая скобка»: String: но если я нахожусь на клочье, поэтому не все пробки внутри strinfg и thi the rison, которые, по мнению SQL, не имеют правильной круглой скобки – Tzahi

ответ

0

Я вижу здесь некоторые возможные вещи. Трудно сказать без DDL для R7810TEST, но у меня есть 2,5 догадок

  1. Последнее утверждение в вашем SQL говорит r400.m_polisa IN (XXXXX). Это не похоже на строго типизированное. Был ли это заполнителем, или это настоящий SQL? Если XXXXX является строкой, вам нужны кавычки. Если это должно быть число, ну ... вы знаете. Если это поле в одной из таблиц, то я полагаю, что все в порядке, но это странная конструкция, если это так.
  2. VBA не очень хорошо сочетается с большими конкатенациями. Вы не указали свой код VBA, но я могу легко увидеть, как он нажимает на строку размером с вашу. Чтобы обойти это, вы можете разбить конкатенацию на несколько этапов. Хотя у вашего SQL фактически есть сбалансированные круглые скобки (за исключением того факта, что круглые скобки вокруг оператора select не нужны), когда вы пытаетесь обернуть это в строки VBA, нетрудно пропустить что-то маленькое.
  3. Последующее наблюдение за пунктом 2 - снова с конкатенацией VBA, что-то простое, как недостающее пространство, может подорвать ваш лучший SQL. Например:

Например:

sql = "select one, two, three" & _ 
     "from foo" 

Невольно становится:

select one, two, threefrom foo 

Образец для точки # 2:

cmd.CommandText = _ 
    "insert into R7810TEST" & _ 
    "select" & _ 
    " 1111111 , 111111 , 1111111 ,'ORG' ,R401.ZIHUI_BAAL_POLISA ,8990 ,'ID' ," & _ 
    " R401.ZIHUI_M_RASHI , R401.M_POLISA ,R440.M_SOCHEN , 201507 ,'ORG' ," & _ 
    " R401.ZIHUI_BAAL_POLISA ,'RTP' , 'CUR' , '1', '*' ,0 ,10000.00 ," & _ 
    " 0.00 , 0.00 , 0.00, 0.00, 0.00 , 0.00,0.00, 0.00 ," & _ 
    " r430.hf_oved_tagmulim_45 ,r430.hf_mavid_tagmulim ," & _ 
    " r430.hf_mavid_pizuim_mukar , 0.00, r430.hf_mavid_chelef," & _ 
    " r430.hf_oved_shonot, r430.hf_mavid_shonot , r430.hf_oved_tagmulim_47 ," & _ 
    " 'MNG', 0.00 , 0.00 ,0.00 ,0.00 , '*' , to_date ('20150701', 'yyyymmdd')," & _ 
    " R401.ZIHUI_BAAL_POLISA, r400.sug_polisa, to_date ('20150701', 'yyyymmdd')," & _ 
    " 'CHI', '12' , 0, 0 ,'0', to_date ('19000101', 'yyyymmdd') " 

cmd.CommandText = cmd.CommandText & _ 
    "from r400 R400 ,r401 R401 ,r430 r430 ,r440 r440 " & _ 
    "where r400.m_polisa = r401.m_polisa " & _ 
    "and r401.m_polisa = r430.m_polisa " & _ 
    "and r430.m_polisa= r440.m_polisa " & _ 
    "and r401.tr_rishum in (select max(aa.tr_rishum) " & _ 
     "from r401 aa where aa.m_polisa = r401.m_polisa) " & _ 
    "and r430.tr_rishum in (select max(aa.tr_rishum) " & _ 
     "from r430 aa where aa.m_polisa = r430.m_polisa) " & _ 
    "and r440.tr_rishum in (select max(aa.tr_rishum) " & _ 
     "from r440 aa where aa.m_polisa = r440.m_polisa) " & _ 
    "and r401.status_rashi = 10 " & _ 
    "and r400.sug_polisa in ('1','3','5','7') " & _ 
    "and r400.sug_hishtatfut <>0 " & _ 
    "and r400.sug_hazmada <>0 " & _ 
    "and r400.m_polisa IN ('XXXXX')" 

Когда в сомнении, широко используют пробелы в вашем SQL.

Прощальный снимок - если это не поможет, отправьте DDL для своих таблиц. Это может дать подсказку о том, что не так.

0

Вы не говорите, что такое ошибка, но похоже, что ваша вставка ... выбор неправильный. В качестве хорошей практики вы должны указать столбцы, которые вы вставляете, перед предложением select, и удалите круглые скобки вокруг выбора. Что-то вроде этого:

insert into R7810TEST 
(column1, column2, ...etc) 
select 1111111 , 111111 , 1111111 ,'ORG' ...etc 
+0

ii запускать этот запрос так же, как это в PL/SQL, отлично работает, когда я помещаю его в vba, я не работаю, поэтому квест хорошо – Tzahi

+0

«ORA-00936: отсутствует выражение" это ошибка, я получаю это строка после того, как я вставляю в строку virble: «вставляем в R7810TEST (выберите 7349926.89865094, 580081.084408164, 6215666.96627682,« ORG », R401.ZIHUI_BAAL_POLISA, 8990, 'ID', R401.ZIHUI_M_RASHI, 775932, R440.M_SOCHEN, 1, 'ORG', R401.ZIHUI_BAAL_POLISA, 'RTP', , '1', '*', 8, 1, 1, 1, 1, 1, 1,1, 1, НЕ ВСЕ СТРОКИ ВХОДЯТ В СТРОКУ VAR – Tzahi

+1

"R401.ZIHUI_BAAL_POLISA, 'RTP',, '1'," даст вам сообщение об ошибке, так как там между двумя этими запятыми нет ничего. Похоже, в коде, который вы используете для создания этого запроса, есть ошибка. –

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