ORA-00904:" T":无效的标识符Apex错误

时间:2017-12-07 09:57:09

标签: oracle11g oracle-apex

我在SQLDeveloper中尝试此查询并定期工作

   select (CASE when :Y1 = '1' then ah.kategorija_sifra when :Y1 = '2' then ah.robnagrupa_sifra when :Y1 = '3' then ah.model
when :Y1 = '6' then ah.grana when :Y1 = '7' then ah.priroda_proizvoda_sifra when :Y1 = '8' then ah.grana_proizvoda_sifra
when :Y1 = '9' then aa.nadgrupa_a when :Y1 = '10' then aa.rgrupa_a when :Y1 = '11' then aa.model_a when :Y1 = '12' then aa.osnovna_sifra end) as grupisanje
, (case when :AY1 = '1' then s.boja_osnovna  when :AY1 = '2' then s.materijal_osnovni when :AY1 = '3' then s.boja_metala  when :AY1 = '4' then s.sezona when :AY1 = '5' then s.kolekcija when :AY1 = '6' then s.nijansa_osn_boje when :AY1 = '7' then s.specificnosti_osn_materjala   when :AY1 = '8' then s.specificnosti_osn_materjala_t when :AY1 = '9' then s.godina_proizvodnje  when :AY1 = '10' then s.nijansa_boje4  end  ) as atribu1
, (case when :AY2 = '1' then s.boja_osnovna  when :AY2 = '2' then s.materijal_osnovni when :AY2 = '3' then s.boja_metala  when :AY2 = '4' then s.sezona when :AY2 = '5' then s.kolekcija when :AY2 = '6' then s.nijansa_osn_boje when :AY2 = '7' then s.specificnosti_osn_materjala   when :AY2 = '8' then s.specificnosti_osn_materjala_t when :AY2 = '9' then s.godina_proizvodnje  when :AY2 = '10' then s.nijansa_boje4  end  ) as atribu2
, (case when :AY3 = '1' then s.boja_osnovna  when :AY3 = '2' then s.materijal_osnovni when :AY3 = '3' then s.boja_metala  when :AY3 = '4' then s.sezona when :AY3 = '5' then s.kolekcija when :AY3 = '6' then s.nijansa_osn_boje when :AY3 = '7' then s.specificnosti_osn_materjala   when :AY3 = '8' then s.specificnosti_osn_materjala_t when :AY3 = '9' then s.godina_proizvodnje  when :AY3 = '10' then s.nijansa_boje4  end  ) as atribu3
, nvl(sum(p.ks_vlp),0) as ks_vlp, nvl(sum(p.ks_mlp),0) as ks_mlp
, nvl(sum(p3s.proiz),0), nvl(sum(p3s.prod_vp),0), nvl(sum(p3s.ost_vp),0), nvl(sum(p3s.kol_vp),0), nvl(sum(p3s.ps_v),0), nvl(sum(p3s.proiz_v),0), nvl(sum(p3s.prod_vp_v),0), nvl(sum(p3s.ost_vp_v),0), nvl(sum(p3s.popust_vp),0), nvl(sum(p3s.poslato),0)  
, nvl(sum(p3s.primljeno),0), nvl(sum(p3s.prod_mp),0), nvl(sum(p3s.ost_mp),0), nvl(sum(p3s.kol_mp),0)
from

(select sifra, velicina,nvl(sum(vlp),0)+nvl(sum(put_vlp),0) as ks_vlp , nvl(sum(mlp),0)+nvl(sum(put_mlp),0) as ks_mlp
from mona_internal.zal_3b_savke
where datum between to_date('01'||substr(:P405,4,8),'dd.mm.yyyy') and :P405
group by sifra, velicina) p

------------------------------------------------------------ Krajnja stanja -------------------------------------------

left join mona_internal.artikli_hijerarhija ah
on p.sifra=ah.artikal_sifra

---------------------------------------------------------- Artikli hijerarhija -----------------------------------------

left join dwh.bck_svojstva s
on s.artikal_sifra= ah.artikal_sifra

---------------------------------------------------------- Svojstva  -----------------------------------------

left join mona_internal.artikli_analiza aa
on aa.sifra=ah.artikal_sifra

---------------------------------------------------------- Artikli analiza -----------------------------------------

left join (
select datum, sifra, velicina
, nvl(sum(proiz),0) proiz, nvl(sum(prod_vp),0) prod_vp, nvl(sum(ost_vp),0) ost_vp, nvl(sum(kol_vp),0) kol_vp, nvl(sum(ps_v),0) ps_v
, nvl(sum(proiz_v),0) proiz_v, nvl(sum(prod_vp_v),0) prod_vp_v, nvl(sum(ost_vp_v),0) ost_vp_v, nvl(sum(popust_vp),0) popust_vp, nvl(sum(poslato),0) as poslato         /* --vlp iz 3bsira*/
, nvl(sum(primljeno),0) primljeno, nvl(sum(prod_mp),0) prod_mp, nvl(sum(ost_mp),0) ost_mp, nvl(sum(kol_mp),0) as kol_mp                                          /* --mlp  iz 3bsira*/
from mona_internal.PROMET_3B_SIRA
where datum between :P305 and :P405
group by datum, sifra, velicina) p3s
on p3s.sifra=ah.artikal_sifra

left join (
select sifra, velicina, sum(vlp)+sum(put_vlp) as vlp, sum(mlp)+sum(put_mlp) as mlp from mona_internal.zal_3b_savke
where (datum between to_date('01'||substr(:P305,4,8),'dd.mm.yyyy')
and case when to_date('01'||substr(:P305,4,8),'dd.mm.yyyy') = :P305 then  to_date(:P305, 'dd.mm.yyyy')  when to_date('01'||substr(:P305,4,8),'dd.mm.yyyy') != :P305 then to_date(:P305, 'dd.mm.yyyy') - 1 end )
and  jeps like (case when to_date('01'||substr(:P305,4,8),'dd.mm.yyyy') = :P305 then  'D' else  '%'  end)
group by sifra, velicina) ps
on ps.sifra=ah.artikal_sifra

---------------------------------------------------------- Pocetna stanja   -----------------------------------------


group by
 (CASE when :Y1 = '1' then ah.kategorija_sifra when :Y1 = '2' then ah.robnagrupa_sifra when :Y1 = '3' then ah.model
when :Y1 = '6' then ah.grana when :Y1 = '7' then ah.priroda_proizvoda_sifra when :Y1 = '8' then ah.grana_proizvoda_sifra
when :Y1 = '9' then aa.nadgrupa_a when :Y1 = '10' then aa.rgrupa_a when :Y1 = '11' then aa.model_a when :Y1 = '12' then aa.osnovna_sifra end)
, (case when :AY1 = '1' then s.boja_osnovna  when :AY1 = '2' then s.materijal_osnovni when :AY1 = '3' then s.boja_metala  when :AY1 = '4' then s.sezona when :AY1 = '5' then s.kolekcija when :AY1 = '6' then s.nijansa_osn_boje when :AY1 = '7' then s.specificnosti_osn_materjala   when :AY1 = '8' then s.specificnosti_osn_materjala_t when :AY1 = '9' then s.godina_proizvodnje  when :AY1 = '10' then s.nijansa_boje4  end  ) 
, (case when :AY2 = '1' then s.boja_osnovna  when :AY2 = '2' then s.materijal_osnovni when :AY2 = '3' then s.boja_metala  when :AY2 = '4' then s.sezona when :AY2 = '5' then s.kolekcija when :AY2 = '6' then s.nijansa_osn_boje when :AY2 = '7' then s.specificnosti_osn_materjala   when :AY2 = '8' then s.specificnosti_osn_materjala_t when :AY2 = '9' then s.godina_proizvodnje  when :AY2 = '10' then s.nijansa_boje4  end  )
, (case when :AY3 = '1' then s.boja_osnovna  when :AY3 = '2' then s.materijal_osnovni when :AY3 = '3' then s.boja_metala  when :AY3 = '4' then s.sezona when :AY3 = '5' then s.kolekcija when :AY3 = '6' then s.nijansa_osn_boje when :AY3 = '7' then s.specificnosti_osn_materjala   when :AY3 = '8' then s.specificnosti_osn_materjala_t when :AY3 = '9' then s.godina_proizvodnje  when :AY3 = '10' then s.nijansa_boje4  end  ) ;

但是当在APEX中输入相同的查询时,它会返回给我:   ORA-00904:" T":标识符无效

我在google上发现了很多个案,但没有一个有这个问题。奇怪的是,它适用于开发人员,但不适用于APEX。

有什么想法吗?

P.S。

1。)参数P305和P405在APEX项目 - 日期选择器

2。)参数Y1是LOV并且具有值  (STATIC:Nadgrupa; 1,RGrupa; 2,模型; 3,基粒; 6,prir_proiz_sif; 7,grana_proiz_sif; 8,   nadgrupa_a; 9,rgrupa_a; 10,model_a; 11,osn_sifra_a; 12)

3.)参数AY1,AY2,AY3也是LOV并且具有相同的值  (STATIC:boja_osnovna; 1,materijal_osnovni; 2,boja_metala; 3,sezona; 4,kolekcija; 5,正  ijan​​sa_osn_boje; 6,specificnosti_osn_materjala; 7,T_specificnosti_osn_materijala;  8,godina_proizvodnje; 9,godina_sezone; 10)

2 个答案:

答案 0 :(得分:0)

尝试减少' T_specificnosti_osn_materijala'一两个字符..

答案 1 :(得分:0)

你使用哪个Apex版本?

事实是:在以前的Apex版本中,您可以在任何(PL /)SQL单元中使用多达4000个字符,因为它是VARCHAR2(4000)数据类型列。您的代码超出了该限制,即看起来Apex占用了您的代码的子字符串,最多4000个字符,并将其存储到其表中。试图执行这样的“无效”语句会导致错误。

由于此SELECT语句使用页面项,因此无法创建视图并将其用作Apex页面上的源。但是,您可能尝试创建一个表函数,其IN参数是Apex页面项的值。

什么是表格功能?它们返回PL / SQL集合,您可以使用TABLE运算符在FROM子句中使用它们。看看下面的例子:

SQL> CREATE TYPE t_tf_row AS OBJECT
  2  (
  3     empno NUMBER,
  4     ename VARCHAR2 (20)
  5  );
  6  /

Type created.

SQL> CREATE TYPE t_tf_tab IS TABLE OF t_tf_row;
  2  /

Type created.

SQL> CREATE OR REPLACE FUNCTION f_test (par_deptno IN NUMBER)
  2     RETURN t_Tf_tab
  3  IS
  4     l_tab   t_tf_tab := t_tf_tab ();
  5  BEGIN
  6     FOR cur_r IN (SELECT empno, ename
  7                     FROM emp
  8                    WHERE deptno = par_Deptno)
  9     LOOP
 10        l_tab.EXTEND;
 11        l_tab (l_tab.LAST) := t_tf_row (cur_r.empno, cur_r.ename);
 12     END LOOP;
 13
 14     RETURN l_tab;
 15  END;
 16  /

Function created.

SQL> select * From table(f_test(20));

     EMPNO ENAME
---------- --------------------
      7566 JONES
      7788 SCOTT
      7902 FORD
      7369 SMITH
      7876 ADAMS

SQL>

您在Apex中使用相同的SELECT语句。

另一个明显的选择是升级到最新的Apex版本(顺便说一句,你怎么还没有这样做?)。