【发布时间】:2017-12-04 13:53:19
【问题描述】:
最近几天我对 APEX 感到非常厌烦,我试图在 application express 中运行交互式报告,但似乎无法使用我在我的 sql 查询中声明的变量。下面是错误,我还包括了有效的代码。 get_longlat() 函数经过测试,它返回 SDO_GEOMETRY 数据类型。
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'')';
【问题讨论】:
-
||仅适用于字符类型,或可以隐式转换为字符类型的类型。 ||运算符连接字符串和 CLOB 数据。
标签: sql oracle plsql oracle-apex