如何修复此动态SQL查询(Apex Oracle)

kuhbmx9i  于 2023-08-03  发布在  Oracle
关注(0)|答案(1)|浏览(155)

我正在尝试运行这个动态SQL查询,但不断遇到问题。它用于显示Oracle Apex示例数据库“emp”中角色为“经理”的员工的人数。

Declare 
Manage_num Number(10);
Manage_count VarChar(150);

Begin 
Manage_count := 'Select COUNT(JOB) from emp where JOB='MANAGER'';
Execute Immediate Manage_count into Manage_num;
DBMS_OUTPUT.PUT_LINE ('Total number of Managers is'||Manage_num);

END

字符串
这是我不断收到的错误消息:
第4/0行出错:ORA-06550:第3行,第1列:PLS-00103:当预期以下之一时,遇到符号“MANAGE_COUNT”:
:= ;非空默认字符符号“;“替换为“MANAGE_COUNT”以继续。ORA-06512:在“SYS.WWV_DBMS_SQL_APEX_230100”,第797行ORA-06550:第5行,第1列:PLS-00103:预期出现以下情况之一时,遇到符号“开始”:
:= ;非空默认字符符号“;”取代“开始”继续。ORA-06550:第6行,第56列:PLS-00103:预期出现以下情况之一时,遇到符号“MANAGER”:

  • & = - + ; < / > at in is mod remainder not rem <an exponent(**)> <> or!= or ~= >= <= <> and or like like like 2 like 4 like c between||在“MANAGER”之前插入符号“* 以继续。ORA-06512:在“SYS.DBMS_SYS_SQL”,第1658行ORA-06512:在“SYS.WWV_DBMS_SQL_APEX_230100”,第782行ORA-06512:在“APEX_230100.WWV_FLOW_DYNAMIC_EXEC”,第2035行
  1. Manage_num编号(10)
  2. Manage_count VarChar(150)
    1.开始
  3. Manage_count:= '从emp中选择COUNT(JOB),其中JOB =' MANAGER '';
    1.立即执行Manage_count到Manage_num;
    我试过根据YouTube教程更改分号和更改语法,但没有成功
    对不起,如果这是一个简单的解决方案或我的问题是模糊的,我是新的论坛。
ffx8fchx

ffx8fchx1#

如前所述,您发布的代码不正确。
基本上,不需要动态SQL,因为代码中没有动态内容。如果你用

declare
  manage_num number;
begin
  select count(*) into manage_num from emp where job = 'MANAGER';
  dbms_output.put_line('Total number of Managers is ' || manage_num);
end;
/

字符串
你就会得到答案
但是,如果您出于某种原因必须使用动态SQL,那么请注意单引号的使用。如果你选择在需要的时候将它们加倍,代码可能会变得难以阅读和维护,所以q引用机制有助于使它更漂亮。另外,Oracle建议我们使用varchar2(而不是varchar)数据类型;但这不是错误

Declare 
  Manage_num   Number(10);
  Manage_count VarChar2(150);
Begin 
  Manage_count := q'[Select COUNT(JOB) from emp where JOB='MANAGER']';
  Execute Immediate Manage_count into Manage_num;
  DBMS_OUTPUT.PUT_LINE ('Total number of Managers is '||Manage_num);
END;
/


这是Apex SQL Workshop中的样子:
x1c 0d1x的数据

相关问题