【问题标题】:is exec statement needed to run sql procedure?运行sql过程需要exec语句吗?
【发布时间】:2021-05-03 16:23:07
【问题描述】:

这是我创建的程序

     QUERY_EMP(EID IN  employees.employee_id%TYPE,JID OUT employees.job_id%TYPE,SAL OUT employees.salary%TYPE)
IS
BEGIN
    SELECT   JOB_ID,SALARY
    INTO       JID,SAL
    FROM     employees
    WHERE   employee_id = EID;
COMMIT;
END;

如果我使用以下方法运行该程序:

    emp_id      employees.employee_id%TYPE; 
    emp_salary  employees.salary%TYPE; 
    emp_job_id  employees.job_id%TYPE; 
begin    
emp_id := 103; 
QUERY_EMP(emp_id,emp_job_id,emp_salary); 
dbms_output.put_line('For: ' || emp_id ); 
dbms_output.put_line('Salary: ' || emp_salary); 
dbms_output.put_line('Job Id: ' || emp_job_id); 
end;

我收到以下错误 encountered exec query instead of symbols =@:(%

但是如果我在运行程序之前没有编写 exec 就运行它。那么为什么这里不需要 exec 命令,这里的 begin 和 end 有什么用呢?

【问题讨论】:

  • oracle live SQL 因为这是大学作业。 LiveSQL 文档中没有提到这一点

标签: sql oracle stored-procedures exec


【解决方案1】:

'exec'(或'execute')是一个sqlplus 命令。它用于告诉 sqlplus 要求服务器执行给定的过程。您正在使用 PL/SQL 块,并且 pl/sql 中没有“exec”命令。 PL/SQL确实有'execute immediate'命令,用于执行动态sql,但是'execute'和'execute immediate'不是一回事。

【讨论】:

  • 感谢您的解释。你能解释一下为什么在运行存储过程之前和之后需要开始和结束吗?你知道我可以从哪里学习这个的任何好的来源吗?我曾在同一个任务中将执行用于另一个过程,它运行没有错误。那个过程没有没有任何输出参数
  • BEGIN 和 END 定义 PL/SQL 块的 BEGINing 和 ENDing。在哪里学习?从文档开始:docs.oracle.com/en/database/oracle/oracle-database/18/lnpls/…
猜你喜欢
  • 1970-01-01
  • 2018-02-09
  • 2018-03-16
  • 1970-01-01
  • 1970-01-01
  • 2018-05-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多