2017-12-04 14 views
0

최근에 APEX에 익숙해 져 있습니다. 응용 프로그램 내에서 대화 형 보고서를 실행하려고하는데 SQL 쿼리 내에서 변수를 선언 할 수 없습니다. 아래 오류입니다, 나는 또한 작동 코드가 포함되어 있습니다. get_longlat() 함수는 테스트되고 작동하며 SDO_GEOMETRY 데이터 형식을 반환합니다.plsql은 SQL select에서 변수를 사용할 수 없습니다.

ORA-06550 : 7 행, 열 12 : PLS-00306 : 잘못된 번호 또는를 호출 인수의 유형 '||' ORA-06550 : 7 행, 1 열 : PL/SQL : 문이

을 무시
DECLARE 
l_query VARCHAR2(4096); 
l_location SDO_GEOMETRY := get_longlat(v('P2_POSTCODE')); 
BEGIN 

l_query := ' 
       SELECT 
       "VENUE_ID", 
       "VENUE_NAME", 
       "CITY", 
       "VENUE_NO", 
       "POSTCODE", 
       dbms_lob.getlength("THUMBNAIL") "THUMBNAIL", 
       "DESCRIPTION", 
       SDO_GEOM.SDO_DISTANCE(G_LOCATION, ' || l_location || ',0.005,''unit=mile'') "G_LOCATION"     
       FROM "GAMEVENUE" 
       WHERE (SDO_WITHIN_DISTANCE(G_LOCATION,' || l_location || ',''distance=250 unit=mile'') = ''TRUE'');'; 

RETURN l_query; 

l_query := ' 
       SELECT 
       "VENUE_ID", 
       "VENUE_NAME", 
       "CITY", 
       "VENUE_NO", 
       "POSTCODE", 
       dbms_lob.getlength("THUMBNAIL") "THUMBNAIL", 
       "DESCRIPTION", 
       SDO_GEOM.SDO_DISTANCE(G_LOCATION, MDSYS.SDO_GEOMETRY(2001,4326,SDO_POINT_TYPE(-4.1530439,50.371089,NULL),NULL,NULL),0.005,''unit=mile'') "G_LOCATION"     
       FROM "GAMEVENUE" 
       WHERE (SDO_WITHIN_DISTANCE(G_LOCATION,SDO_GEOMETRY(2001,4326,SDO_POINT_TYPE(-4.1530439,50.371089,null),null,null),''distance=250 unit=mile'') = ''TRUE'')'; 
+1

|| 문자 유형 또는 암시 적으로 문자 유형으로 변환 할 수있는 유형에서만 작동합니다. || 연산자는 문자열과 CLOB 데이터를 연결합니다. – TurtlesAllTheWayDown

답변

1

SDO_GEOMETRY 때문에 유형 char 또는 number (문자로 암시 적으로 상당한)이 아닌 작품 , 당신은 직접적인 concetenation에서 그것을 사용할 수 없습니다. 대신을 시도

l_sdo_gtypel_sdo_sridl_longitude, l_latitude 유형의 숫자입니다
l_query := ' 
       SELECT 
       "VENUE_ID", 
       "VENUE_NAME", 
       "CITY", 
       "VENUE_NO", 
       "POSTCODE", 
       dbms_lob.getlength("THUMBNAIL") "THUMBNAIL", 
       "DESCRIPTION", 
       SDO_GEOM.SDO_DISTANCE(G_LOCATION, MDSYS.SDO_GEOMETRY('||l_sdo_gtype||','||l_sdo_srid||',MDSYS.SDO_POINT_TYPE('||l_longitude||','||l_latitude||',NULL),NULL,NULL),0.005,''unit=mile'') "G_LOCATION"     
       FROM "GAMEVENUE" 
       WHERE (SDO_WITHIN_DISTANCE(G_LOCATION,SDO_GEOMETRY('||l_sdo_gtype||','||l_sdo_srid||',SDO_POINT_TYPE('||l_longitude||','||l_latitude||',null),null,null),''distance=250 unit=mile'') = ''TRUE'')'; 

;

+0

반환 된 쿼리 결과를 구문 분석하면 "ORA-06550 : 줄 10, 열 78 : ORA-00936 : 누락 된 식"이 반환됩니다. 쿼리가 문법적으로 정확하다고 생각되면 아래의 "일반 열 이름 사용"확인란을 선택하여 파싱하지 않고 계속 진행하십시오. –