Oracle apex oracle apex 18.2 pl/sql函数体返回sql查询检查页项值
我正在创建一个返回sql查询的交互式reporOracle apex oracle apex 18.2 pl/sql函数体返回sql查询检查页项值,oracle-apex,Oracle Apex,我正在创建一个返回sql查询的交互式reporpl/sql函数体 我有一个页面项:P1\u DIVISION\u ID作为参数传递,并检查项值是否不为空,如下所示 declare lv_query varchar2(4000); begin IF :P1_DIVISION_ID IS NOT NULL THEN select 'select DIVISION, CUSTOMER_ID, PARTY_NAME, ACCOUNT_NUMBER,
pl/sql函数体
我有一个页面项:P1\u DIVISION\u ID
作为参数传递,并检查项值是否不为空,如下所示
declare
lv_query varchar2(4000);
begin
IF :P1_DIVISION_ID IS NOT NULL THEN
select 'select DIVISION,
CUSTOMER_ID,
PARTY_NAME,
ACCOUNT_NUMBER,
ORG_ID,
OU_NAME,
AGING_1_30,
AGING_31_60,
AGING_61_90,
ABOVE_90,
CURRENT_BALANCE,
PAST_DUE,
WEBSITE_STATUS,
BLOCK_DATE,
BLOCK_REASON,
TOTAL_NUM_LOGIN,
CP_LAST_PAY_DT,
CP_LAST_AMT,
CP_LAST_PAY_MODE,
CP_AGE,
CP_STATUS,
CP_DATE,
CP_DEFF,
CP_UNBILL,
CP_PHONE,
CP_EMAIL,
CP_ACCT_MGR,
FU_ASSIGN,
CP_LTR_SENT_DATE,
CP_LTR_TYPE,
CP_COMMENTS,
COMMENTS
from XX_CUSTOMER_AGING_V WHERE DIVISION '||:P1_DIVISION_ID INTO lv_query
FROM DUAL;
END IF;
RETURN lv_query;
end;
但当我验证查询时,它会显示以下错误
ORA-20999:WWV\u FLOW\u EXEC.NULL\u QUERY\u由函数返回
处理错误所需的建议
P1\u DIVISION\u ID
时的查询是什么样的?此函数返回空值,因为您没有指定空值,因此出现错误
不要做选择。。。从dual进入lv_查询
。只需将字符串赋给变量
你的功能做得不多,那你为什么还要这么做?为什么不仅仅是源代码的SQL查询
P1\u DIVISION\u ID
时的查询是什么样的?此函数返回空值,因为您没有指定空值,因此出现错误
不要做选择。。。从dual进入lv_查询
。只需将字符串赋给变量
你的功能做得不多,那你为什么还要这么做?为什么不仅仅是源代码的SQL查询
我建议您使用代码创建一个函数:
create or replace function get_my_query return VARCHAR2
is
lv_query varchar2(4000);
begin
IF v('P1_DIVISION_ID') IS NOT NULL THEN
return q'!select DIVISION,
CUSTOMER_ID,
PARTY_NAME,
ACCOUNT_NUMBER,
ORG_ID,
OU_NAME,
AGING_1_30,
AGING_31_60,
AGING_61_90,
ABOVE_90,
CURRENT_BALANCE,
PAST_DUE,
WEBSITE_STATUS,
BLOCK_DATE,
BLOCK_REASON,
TOTAL_NUM_LOGIN,
CP_LAST_PAY_DT,
CP_LAST_AMT,
CP_LAST_PAY_MODE,
CP_AGE,
CP_STATUS,
CP_DATE,
CP_DEFF,
CP_UNBILL,
CP_PHONE,
CP_EMAIL,
CP_ACCT_MGR,
FU_ASSIGN,
CP_LTR_SENT_DATE,
CP_LTR_TYPE,
CP_COMMENTS,
COMMENTS
from XX_CUSTOMER_AGING_V WHERE DIVISION=:P1_DIVISION_ID!';
END IF;
end;
然后,在返回SQL查询的PL/SQL函数体中使用此函数:
return get_my_query;
我建议您使用代码创建一个函数:
create or replace function get_my_query return VARCHAR2
is
lv_query varchar2(4000);
begin
IF v('P1_DIVISION_ID') IS NOT NULL THEN
return q'!select DIVISION,
CUSTOMER_ID,
PARTY_NAME,
ACCOUNT_NUMBER,
ORG_ID,
OU_NAME,
AGING_1_30,
AGING_31_60,
AGING_61_90,
ABOVE_90,
CURRENT_BALANCE,
PAST_DUE,
WEBSITE_STATUS,
BLOCK_DATE,
BLOCK_REASON,
TOTAL_NUM_LOGIN,
CP_LAST_PAY_DT,
CP_LAST_AMT,
CP_LAST_PAY_MODE,
CP_AGE,
CP_STATUS,
CP_DATE,
CP_DEFF,
CP_UNBILL,
CP_PHONE,
CP_EMAIL,
CP_ACCT_MGR,
FU_ASSIGN,
CP_LTR_SENT_DATE,
CP_LTR_TYPE,
CP_COMMENTS,
COMMENTS
from XX_CUSTOMER_AGING_V WHERE DIVISION=:P1_DIVISION_ID!';
END IF;
end;
然后,在返回SQL查询的PL/SQL函数体中使用此函数:
return get_my_query;
+1; 该查询中没有动态内容,因此-在返回查询的函数中没有点。一个简单的从XX_CUSTOMER_AGING_V WHERE DIVISION=:P1_DIVISION_ID
中选择任何内容就足够了。我有4个基于4个页面项目的差异WHERE子句,我想检查是否有任何页面项目不为空。相同的查询将返回一些不同的WHERE子句,我们在您的问题中看不到详细程度,因此,您是判断按函数查询是否合适的最佳人选。我很少使用它作为源代码,因为大多数用例都会遇到精心编制的WHERE子句。如果这是必要的,只需确保函数始终返回有效的SQL查询。并将绑定变量构建到查询字符串中-不要将它们浓缩,这会将它们转换为文本。+1;该查询中没有动态内容,因此-在返回查询的函数中没有点。一个简单的从XX_CUSTOMER_AGING_V WHERE DIVISION=:P1_DIVISION_ID
中选择任何内容就足够了。我有4个基于4个页面项目的差异WHERE子句,我想检查是否有任何页面项目不为空。相同的查询将返回一些不同的WHERE子句,我们在您的问题中看不到详细程度,因此,您是判断按函数查询是否合适的最佳人选。我很少使用它作为源代码,因为大多数用例都会遇到精心编制的WHERE子句。如果有必要,只需确保函数始终返回有效的SQL查询。并将绑定变量构建到查询字符串中-不要将它们浓缩,这会将它们转换为文本。如果他真的想创建“pl/SQL函数体返回SQL查询”类型的IR,我同意将其包装到函数中是一种方法。但根据之前的谈话,我觉得他根本不需要这么做。如果他真的想创建一个“pl/sql函数体返回sql查询”类型的IR,我同意将其包装到函数中是一种可行的方法。但根据之前的谈话,我觉得他根本不需要这么做。他一次查询所有4个字段会得到更快的结果,正确处理空参数值。