【发布时间】:2018-04-20 03:15:22
【问题描述】:
我需要使用 EXECUTE IMMEDIATE 命令编写一个查询,将我在嵌套查询中计算的两个值相加。我想知道我是否必须使用 USING 子句或其他子句以及如何将我创建的变量放入语句中。查询如下:
编辑:这是新查询,绑定变量仍然存在问题(Ora-01008:并非所有变量都已绑定)。你能帮我解决这个问题吗?
EXECUTE IMMEDIATE 'SELECT sum (n_record_trovati_p) FROM (
SELECT count(*) as n_record_trovati_p FROM od_pv_trading_day_orders partition (' || partition_current_month || ') WHERE DATETIME = :1 AND orderid = :2 AND broker = :3
UNION
SELECT count(*) as n_record_trovati_p FROM od_pv_trading_day_orders partition (' || partition_previous_month || ') WHERE DATETIME = :1 AND orderid = :2 AND broker = :3
)' INTO n_record_trovati
USING d_datetime, n_orderid, cur.broker;
//old query
sys_current_date VARCHAR2 (7);
sys_previous_date VARCHAR2 (7);
partition_current_month VARCHAR2 (8);
partition_previous_month VARCHAR2 (8);
BEGIN
...
SELECT TO_CHAR(ADD_MONTHS(d_datetime,0),'yyyymm') INTO sys_current_date FROM dual;
SELECT TO_CHAR(ADD_MONTHS(d_datetime,-1),'yyyymm') INTO sys_previous_date FROM dual;
partition_current_month := 'P'|| sys_current_date;
partition_previous_month := 'P'|| sys_previous_date;
EXECUTE IMMEDIATE 'SELECT SUM (found_records) INTO ' || n_record_trovati || ' FROM (
SELECT COUNT(*) as found_records FROM example_table PARTITION (' || partition_current_month || ') WHERE DATETIME = ' || d_datetime || ' AND orderid = ' || n_orderid || ' AND broker = ' || cur.broker || '
UNION
SELECT COUNT(*) as found_records FROM example_table PARTITION (' || partition_previous_month || ') WHERE DATETIME = ' || d_datetime || ' AND orderid = ' || n_orderid || ' AND broker = ' ||cur.broker || '
)';
...
end
我尝试使用 || 将变量名与执行立即字符串的其余部分分开。运算符,但弹出错误。你能告诉我我的查询有什么问题吗?我该如何解决?谢谢
【问题讨论】:
-
错误是什么?
-
“缺少表达式”,即使没有编译错误
标签: oracle plsql execute-immediate