【问题标题】:Select statement inside an Oracle stored procedureOracle 存储过程中的 Select 语句
【发布时间】:2018-10-10 05:17:46
【问题描述】:

我正在尝试自学 SQL。我正在从 oracle 的存储过程中调用一个简单的 select 语句。

我创建了一个包含 2 个表的员工数据库;员工和部门。我想要一个 select 语句,它返回某个部门的所有员工。

这是我到目前为止所拥有的,我无法弄清楚我哪里出错了

create or replace procedure user_empdepart (depart_name varchar(40))
AS
BEGIN
    SELECT emp_name FROM employee JOIN department ON department.departmentID = 
employee.departmentID
    WHERE depart_name = 'research';
END;

然后我希望通过;

exec user_empdepart(research);

我正在使用 SQL Developer Oracle

我收到以下错误消息:

错误(99,50):PLS-00103:在预期以下之一时遇到符号“DEPARTMENT”:, ;对于有相交负序的组,在哪里连接开始联合

【问题讨论】:

  • 想向我们解释发生了什么问题?
  • 你可以直接从客户端执行select(完全不需要存储过程)
  • 您是否收到错误消息?它说什么?
  • 抱歉没有包含该信息,这是我收到的错误消息 ---Error(99,50): PLS-00103: 在预期以下情况之一时遇到符号“DEPARTMENT”: , ;对于有 intersect 减去 order start union where connect 的组 --- 我知道我可以直接从客户端执行选择,但试图在一个非常基本的设置中理解存储过程 :)

标签: sql oracle-sqldeveloper


【解决方案1】:

我认为你需要这个 -

create or replace procedure user_empdepart (depart_name varchar(40))
AS
DECLARE dept_name varchar(200);
dept_name := depart_name;
BEGIN
SELECT emp_name FROM employee JOIN department ON department.departmentID = employee.departmentID
WHERE depart_name := dept_name;
END;

【讨论】:

    【解决方案2】:

    在 Oracle 数据库中,直接在客户端(如 SQL-Developer 或 SQLPlus)中执行的 SQL 语句被视为普通的普通 SQL。
    但是,如果您要在过程或函数中使用 SQL 命令,Oracle 会将它们视为 PL/SQL 命令,而不是 SQL。
    对于简单的 INSERT、DELETE 和 UPDATE 命令,PL/SQL 中的语法与 SQL 中的相同,但是对于 SELECT,语法略有不同:PL/SQL SELECT INTO Statement

    您必须使用SELECT expression-list INTO variables-list/record FROM ..... 语法。
    您不能使用SELECT expression-list FROM .....,这会产生语法错误。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-08-27
      • 2012-11-19
      • 1970-01-01
      • 2019-01-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多