Sql 执行立即变量抛出错误ORA-00936:缺少表达式
当我的过程到达此语句时,出现缺少表达式错误。 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
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是一个数字数据类型的变量。由于这是一个大程序的摘录,我错过了复制声明的机会。