sql - 立即执行并抛出变量错误 ORA-00936 : missing expression

标签 sql oracle plsql oracle-sqldeveloper

当我的程序到达此语句时,出现缺少表达式错误。 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;
/

<强> Demo on DB Fiddle

关于sql - 立即执行并抛出变量错误 ORA-00936 : missing expression,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58522160/

相关文章:

sql - 在子查询中按 id 排序

oracle - 脚本中包含一个远程表的 DRIVING_SITE Oracle 提示

java - 为什么以及何时在 JAXB 中需要 JAXBElement?

sql - Oracle - 两次之间每小时插入一行

sql - 我该如何 "Order by min(subquery)"?

sql - 为 MS Access 编写 SQL 查询

mysql - SQL 嵌套集合表

linux - 静默安装后监听器未启动

oracle - 对象类型中 %ROWTYPE 的解决方法

PHP登录,登录按钮刷新页面