Oracle 我对游标的SQL查询有什么问题

Oracle 我对游标的SQL查询有什么问题,oracle,plsql,database-cursor,Oracle,Plsql,Database Cursor,这是我应该做的。假设已创建表,并且所有列的名称都正确 “使用存储过程和光标,显示职务id为IT_PROG或SA_MAN且工资高于3000的经理的位置(包括街道、邮政编码、城市和国家/地区)” 这是我到目前为止编写的代码,但游标的sql语句似乎不起作用。对于部门表,FK为经理ID和地点ID;对于员工表,FK为工作ID,地点表无FK。所有主键都已设置 代码如下: create or replace procedure mgtLocation is cursor getLoc is

这是我应该做的。假设已创建表,并且所有列的名称都正确

“使用存储过程和光标,显示职务id为IT_PROG或SA_MAN且工资高于3000的经理的位置(包括街道、邮政编码、城市和国家/地区)”

这是我到目前为止编写的代码,但游标的sql语句似乎不起作用。对于部门表,FK为经理ID和地点ID;对于员工表,FK为工作ID,地点表无FK。所有主键都已设置

代码如下:

create or replace procedure mgtLocation
is
    cursor getLoc is
        select LOCATIONS.STREET_ADDRESS, LOCATIONS.POSTAL_CODE, LOCATIONS.CITY, 
               LOCATIONS.COUNTRY, LOCATIONS.LOCATIONS_ID, LOCATIONS.LOCATIONS_ID
          from LOCATIONS 
    inner join DEPARTMENTS on DEPARTMENTS.MANAGER_ID = EMPLOYEES.EMPLOYEE_ID
    inner join LOCATIONS on LOCATIONS.LOCATION_ID = DEPARTMENTS.LOCATION_ID
         where EMPLOYEES.Job_ID in (select Job_ID from EMPLOYEES where Job_ID = 'IT_PROG' or Job_ID = 'SA_MAN' and SALARY > 3000); 
    EmpLoc getLoc%rowtype;
begin
    dbms_output.put_line('=================');
    open getLoc;
    loop
        fetch getLoc into EmpLoc;
        EXIT WHEN getLoc%NOTFOUND;
        dbms_output.put_line('Street: ' || EmpLoc.STREET_ADDRESS ||
            ' Zip Code: ' || EmpLoc.POSTAL_CODE ||
            ' City: ' || EmpLoc.CITY ||
            ' Country: ' || EmpLoc.COUNTRY);
    end loop;
    dbms_output.put_line('=================');
    close getLoc;
end;
/
execute mgtLocation;
我得到了一个内部连接的错误,我似乎无法找出如何修复它们,以使其工作

您可以尝试以下方法:

cursor getLoc is
    select LOCATIONS.STREET_ADDRESS, 
          LOCATIONS.POSTAL_CODE, LOCATIONS.CITY, 
          LOCATIONS.COUNTRY, LOCATIONS.LOCATIONS_ID, 
          LOCATIONS.LOCATIONS_ID
    from LOCATIONS 
    inner join DEPARTMENTS  on   
          DEPARTMENTS.LOCATION_ID = LOCATIONS.LOCATION_ID  
    inner join EMPLOYEES on 
          EMPLOYEES.EMPLOYEE_ID = 
          DEPARTMENTS.MANAGER_ID
    where (EMPLOYEES.Job_ID = 'IT_PROG' or 
          EMPLOYEES.Job_ID = 'SA_MAN') 
    and SALARY > 3000;

过程代码是高度特定于供应商的-因此请添加一个标记,以指定您是使用的是
mysql
postgresql
sql server
oracle
还是
db2
-或其他完全不同的代码。请检查,在查询中,您没有在from子句中指定表
employees
,而是在JOIN中引用它。您得到了什么错误?为我们准备了一个ORA-xxxxx?看起来像是一个简单的错误:
来自位置
应该是
来自员工