当我的程序到达此语句时,出现缺少表达式错误。 ORA-00936: 缺少表达式 这个说法有什么问题吗?
EXECUTE IMMEDIATE 'SELECT /*+ parallel (8) */ COUNT(1)
INTO '||v_datacount_backuptable||
' FROM cs_transassignment_26weeks';
最佳答案
您想要实现的目标尚不清楚。无论如何,您都不能将变量名称作为变量传递。
如果您想从固定查询将计数输入到变量中,那么您可以跳过EXECUTE IMMEDIATE
:它的目的是执行动态组合的查询,但情况并非如此在您显示的代码中:
declare v_datacount_backuptable int;
begin
SELECT /*+ parallel (8) */ COUNT(1) INTO v_datacount_backuptable FROM cs_transassignment_26weeks;
dbms_output.put_line(v_datacount_backuptable);
end;
/
如果您实际上在其他地方构建了查询并且需要执行它,那么,正如 Littlefoot 已经回答的那样,您需要将 INTO
子句移出查询字符串:
declare
v_datacount_backuptable int;
v_query varchar(500);
begin
v_query := 'SELECT /*+ parallel (8) */ COUNT(1) FROM cs_transassignment_26weeks';
EXECUTE IMMEDIATE v_query INTO v_datacount_backuptable;
dbms_output.put_line(v_datacount_backuptable);
end;
/
关于sql - 立即执行并抛出变量错误 ORA-00936 : missing expression,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58522160/