1
>        set serveroutput on  
>        set autoprint on;  
>       declare  
>       v_first_name employees.first_name%type;  
>       v_street_address locations.street_address%type;   
>       v_city locations.city%type;    
>       v_postal_code locations.postal_code%type;   
>       begin   
>       select employee_id first_name,street_address,city,postal_code       into:b_employee_id,v_first_name,v_street_address,v_city,v_postal_code 
> 
>       from employees   natural join locations    
>     where employee_id=156;    // how to get employee_id stored in b_employee_ud
>     dbms_output.put_line('the employee'||v_first_name ||' is located    at:'||v_street_address||   v_city ||v_postal_code );    
>     end;     
>     /

收到错误错误报告:ORA-06550:第 7 行,第 134 列:PL/SQL:ORA-00913:值太多 ORA-06550:第 7 行,第 1 列:PL/SQL:SQL 语句被忽略 06550。00000 -“行 % s,列 %s:\n%s" *原因:通常是 PL/SQL 编译错误。*行动:

b_employee_id

156

我想使用存储在 b_employee_id 中的employee_id

4

1 回答 1

2

首先,您在 SELECT 子句中缺少commaafter employee_id

select employee_id first_name,street_address,city,postal_code 
into   :b_employee_id,v_first_name,v_street_address,v_city,v_postal_code 

应该

select employee_id, first_name,street_address,city,postal_code 
into   :b_employee_id,v_first_name,v_street_address,v_city,v_postal_code 

现在,回到您要使用employee_id = 156 的部分

我想使用存储在 b_employee_id 中的employee_id

如果您的意图不是对要运行查询的employee_id 进行硬编码(我通过阅读 WHERE 子句末尾的注释行来猜测这一点),那么您需要在 WHERE 子句中使用替换变量,例如这个:

WHERE employee_id = :b_emp_id

这里还有另一个假设,表中有一个员工的记录,您试图从中检索记录。你不应该在变量中使用替换变量INTO clause

如果您出于任何原因想要将返回的值覆盖为INTO clause其他值,您可以稍后在程序中使用另一个变量来执行此操作。

于 2014-02-10T07:22:54.410 回答