Sql 执行立即变量抛出错误ORA-00936:缺少表达式

Sql 执行立即变量抛出错误ORA-00936:缺少表达式,sql,oracle,plsql,oracle-sqldeveloper,Sql,Oracle,Plsql,Oracle Sqldeveloper,当我的过程到达此语句时,出现缺少表达式错误。 ORA-00936:缺少表达式 这句话有什么不对 EXECUTE IMMEDIATE 'SELECT /*+ parallel (8) */ COUNT(1) INTO '||v_datacount_backuptable|| ' FROM cs_transassignment_26weeks'; 应该是 EXECUTE IMMEDIATE 'SELECT /*+ parallel (8) */ COUNT(1) FROM cs_tra

当我的过程到达此语句时,出现缺少表达式错误。 ORA-00936:缺少表达式 这句话有什么不对

  EXECUTE IMMEDIATE 'SELECT /*+ parallel (8) */ COUNT(1)
  INTO '||v_datacount_backuptable||
  ' FROM cs_transassignment_26weeks';
应该是

EXECUTE IMMEDIATE 'SELECT /*+ parallel (8) */ COUNT(1) FROM cs_transassignment_26weeks'
  INTO v_datacount_backuptable;
i、 e.INTO在正在执行的语句之外。

应该是

EXECUTE IMMEDIATE 'SELECT /*+ parallel (8) */ COUNT(1) FROM cs_transassignment_26weeks'
  INTO v_datacount_backuptable;

i、 e.INTO在正在执行的语句之外。

您试图实现的目标还不清楚。在任何情况下,都不能将变量名作为变量传递

如果要将计数从固定查询输入到变量中,则可以跳过“立即执行”:这意味着要执行动态组合的查询,而您显示的代码中没有这种情况:

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;
/

你想要达到的目标还不清楚。在任何情况下,都不能将变量名作为变量传递

如果要将计数从固定查询输入到变量中,则可以跳过“立即执行”:这意味着要执行动态组合的查询,而您显示的代码中没有这种情况:

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;
/

什么是v_datacount_backuptable?什么是v_datacount_backuptable?这比我快,虽然可能不够全面+不管怎样,这个语句实际上在一个包含11个过程的包中。表cs_transassignment_26weeks只是一个临时表,使用EXECUTE IMMEDIATE create Table as创建。那张表只在少数语句中使用。我们将所有这些语句都编写为动态SQL coz:该表在过程结束时被删除,因为它没有任何用处,并且节省了空间。然而,当我运行下一个过程时,如果我将它作为简单的SELECT COINT1写入v_datacount_backuptable FROM cs_transassignment_26周,那么包将被解压。所以这听起来不对。在我看来,您应该只创建一次表,并随时使用它。两个选项:使用全局临时表。它的内容将在事务或会话结束时丢失,具体取决于您创建它的方式,或者-如果它是一个普通表-在您的工作完成后将其截断。这比我快,但可能不够全面+不管怎样,这个语句实际上在一个包含11个过程的包中。表cs_transassignment_26weeks只是一个临时表,使用EXECUTE IMMEDIATE create Table as创建。那张表只在少数语句中使用。我们将所有这些语句都编写为动态SQL coz:该表在过程结束时被删除,因为它没有任何用处,并且节省了空间。然而,当我运行下一个过程时,如果我将它作为简单的SELECT COINT1写入v_datacount_backuptable FROM cs_transassignment_26周,那么包将被解压。所以这听起来不对。在我看来,您应该只创建一次表,并随时使用它。两个选项:使用全局临时表。根据您创建它的方式,它的内容将在事务或会话结束时丢失,或者,如果它是一个普通表,则在您的工作完成后将其截断。谢谢。v_datacount_backuptable是一个数字数据类型的变量。由于这是一个大程序的摘录,我错过了复制声明的机会。谢谢。v_datacount_backuptable是一个数字数据类型的变量。由于这是一个大程序的摘录,我错过了复制声明的机会。